全球网站排名查询,wordpress伪静态 加速,做项目网站要不要备案,肇庆自助建站模板我们在WPF-03 资源之Resources结尾中介绍逻辑树和可视化树的基本概念#xff0c;我们这节来介绍这两棵树逻辑树#xff08;Logical Tree#xff09;逻辑树是由每个控件的节点组成#xff0c;本质上就是XAML文件中的UI元素#xff0c;我们可以通过LogicalTreeHelper类提供的…我们在WPF-03 资源之Resources结尾中介绍逻辑树和可视化树的基本概念我们这节来介绍这两棵树逻辑树Logical Tree逻辑树是由每个控件的节点组成本质上就是XAML文件中的UI元素我们可以通过LogicalTreeHelper类提供的静态方法获取逻辑树的对象我们通过一个例子演示获取整个页面逻辑树Window x:ClassExample_10.RepresentLogicalTreexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:Example_10 mc:Ignorabled TitleRepresentLogicalTree Height450 Width800GridGrid.RowDefinitionsRowDefinition Height0.15*/RowDefinitionRowDefinition/RowDefinition/Grid.RowDefinitionsGrid.ColumnDefinitionsColumnDefinition/ColumnDefinition/Grid.ColumnDefinitionsStackPanel Grid.Row0 Grid.Column0 OrientationHorizontalButton NamebtnLogical Height30 ClickbtnClick_Click展示逻辑树/ButtonLabel VerticalAlignmentCenter Margin200,0,0,0Label 控件/Label/StackPanelStackPanelTreeView NamelogicalTree/TreeView/StackPanel/Grid
/Windowpublic partial class RepresentLogicalTree : Window{public RepresentLogicalTree(){InitializeComponent();}private void btnClick_Click(object sender, RoutedEventArgs e){logicalTree.Items.Add(GetLogicTree(this));}public static TreeViewItem GetLogicTree(DependencyObject obj){if (obj null){return null;}TreeViewItem treeNode new TreeViewItem { Header obj.GetType().FullName, IsExpanded true };foreach (var child in LogicalTreeHelper.GetChildren(obj)){var item GetLogicTree(child as DependencyObject);if (item ! null){treeNode.Items.Add(item);}}return treeNode;}}我们可以很清晰的看到整个逻辑树节点对应到XAML页面中的元素可视化树Visual Tree可视化树是逻辑树的一种扩展逻辑树的每个结点都被分解为核心视觉组件逻辑树节点对我们来说是个黑箱而视觉树暴露了视觉的实现细节我们可以通过VisualTreeHelper类提供的静态方法获取可视化树节点可视化树要比逻辑树呈现的粒度更细XAML结构和上面结构相同我们来呈现可视化树结构public partial class RepresentVisualTree : Window{public RepresentVisualTree(){InitializeComponent();}private void btnVisual_Click(object sender, RoutedEventArgs e){VisualTree.Items.Add(GetVisualTree(this));}public static TreeViewItem GetVisualTree(DependencyObject obj){if (obj null){return null;}TreeViewItem treeNode new TreeViewItem { Header obj.GetType().FullName, IsExpanded true };for (int i 0; i VisualTreeHelper.GetChildrenCount(obj); i){var child VisualTreeHelper.GetChild(obj, i);var item GetVisualTree(child);if (item ! null){treeNode.Items.Add(item);}}return treeNode;}}从上面的例子我们可以看到更细粒度的控件组成部件下图展示了整个视觉图的组成绿色表示可视化树红色表示逻辑树可视化树范围包含逻辑树这节我们主要了解WPF中逻辑树和可视化树通过本节希望能够加深对WPF中控件组成的部件的了解