Copy from https://www.c-sharpcorner.com/blogs/wpf-logical-and-visual-trees1
WPF's hierarchical structure requires a new conceptual model of application structure, which takes the form of an element tree. Two types of element trees are required to adequately represent an element structure: a Logical Tree and a Visual Tree. LOGICAL TREE: The Logical Tree is a tree structure that represents the hierarchy of controls and elements that constitute a piece of user interface in WPF, but without their inner parts. The logical tree is responsible for: 1. Inherit DependencyProperty values 2. Resolving DynamicResources references 3. Looking up element names for bindings 4. Forwaring RoutedEvents Example: DockPanel +ListBox +Button +Button +Button VISUAL TREE: The Visual Tree is a tree structure that represents the fine-grained hierarchy of Visuals that constitute what appears on the screen. It contains the same elements as the Logical Tree, but includes all the Visuals that are used to compose the Logical Tree's controls and elements, like the ControlTemplates and DataTemplates. The visual tree is responsible for: 1. Rendering visual elements 2. Propagate element opacity 3. Propagate Layout- and RenderTransforms 4. Propagate the IsEnabled property. 5. Do Hit-Testing 6. RelativeSource Example: DockPanel +ListBox +Border +... +VirtualizingStackPanel +ListBoxItem +Button +Border +....
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp283 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); PrintLogicalTree(0, this); //var logicalTrees=LogicalTreeHelper.GetChildren(this); } private void PrintLogicalTree(int depth, object obj) { Debug.WriteLine($"LogicalTree:{depth}"); if (!(obj is DependencyObject)) { return; } foreach (object child in LogicalTreeHelper.GetChildren(obj as DependencyObject)) { PrintLogicalTree(depth+1, child); } } protected override void OnContentRendered(EventArgs e) { base.OnContentRendered(e); PrintVisualTree(0, this); } void PrintVisualTree(int depth,DependencyObject obj) { Debug.WriteLine($"Visualtree:{depth}"); for(int i=0;i<VisualTreeHelper.GetChildrenCount(obj);i++) { PrintVisualTree(depth+1,VisualTreeHelper.GetChild(obj,i)); } } } }
标签:Windows,tree,Tree,System,vs,using,WPF,structure From: https://www.cnblogs.com/Fred1987/p/18379236