WPF中的逻辑树

本文介绍了WPF中的逻辑树概念,它描述了界面元素的构成。通过示例代码展示了如何创建并遍历逻辑树,强调了逻辑树是由程序在XAML中定义的UI元素组成,如Grid、DockPanel等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WPF中的逻辑树

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术: Visual Studio 2015 * SQL Server

作者:

撰写时间:2019年06月27日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在WPF中,通过为支持UI元素的对象设置属性,可以下行这些UI元素添加内容。例如:你将项添加到ListBox通过操作控制其Items属性。通过执行此操作,你将项放入ItemCollection,它是Items属性值。同样,可以将对象添加到DockPanel,则操作其Children属性值。在这里,会将对象添加到UIEmentCollection。有关代码如下:

逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成。最显著的特点就是由布局控件、或者其他常用的控件组成

<Grid>

        <DockPanel>

            <Button DockPanel.Dock="Top" Click="Button_Click" Content="获取逻辑树和可视树"></Button>

            <Grid>

                <Grid.ColumnDefinitions>

                    <ColumnDefinition></ColumnDefinition>

                    <ColumnDefinition></ColumnDefinition>

                </Grid.ColumnDefinitions>

 

                <DockPanel Grid.Column="0">

                    <TextBlock DockPanel.Dock="Top" Text="逻辑树"></TextBlock>

                    <TreeView Name="tvLogicTree"></TreeView>

                </DockPanel>

            </Grid>

        </DockPanel> 

    </Grid>

 

 

 

static string GetTypeDescription(object obj)

        {

            return obj.GetType().FullName;

        }

        private void Button_Click(object sender, RoutedEventArgs e)

        {

            this.tvLogicTree.Items.Add(GetLogicTree(this));

            //this.tvVisualTree.Items.Add(GetVisualTree(this));

        }

        // 获取逻辑树

        public static TreeViewItem GetLogicTree(DependencyObject obj)

        {

            if (obj==null)

            {

                return null;

            }

            //创建逻辑树的节点

            TreeViewItem treeItem = new TreeViewItem { Header = GetTypeDescription(obj), IsEnabled = true };

            //循环遍历,获取逻辑树的所有子节点

            foreach (var child in LogicalTreeHelper.GetChildren(obj))

            {

                //递归调用

                var item = GetLogicTree(child as DependencyObject);

                if (item != null)

                {

                    treeItem.Items.Add(item);

                }

            }

            return treeItem;

        }

从上面的代码中可以看出,Grid、DockPanel、Button、Grid等其实就是XAML界面的逻辑树。

 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值