Logical Visual Tree Sample : UI Element « Windows Presentation Foundation « C# / CSharp Tutorial






<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="LogicalVisualTreeSample" Height="300" Width="300">
  <WrapPanel Name="rootPanel">
    <Button>_Click me</Button>
  </WrapPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
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.Shapes;
using System.Diagnostics;


namespace WpfApplication1 {
  public partial class Window1 : System.Windows.Window {

    public Window1() {
      InitializeComponent();
      DumpLogicalTree(rootPanel);
    }
    protected override void OnContentRendered(EventArgs e) {
      base.OnContentRendered(e);
      DumpVisualTree(rootPanel);
    }

    void DumpLogicalTree(object parent) {
      string typeName = parent.GetType().Name;
      string name = null;
      DependencyObject doParent = parent as DependencyObject;

      if( doParent != null ) {
        name = (string)(doParent.GetValue(FrameworkElement.NameProperty) ?? "");
      }
      else {
        name = parent.ToString();
      }

      Debug.WriteLine(typeName);
      Console.WriteLine(name);
      if( doParent == null ) { return; }

      foreach( object child in LogicalTreeHelper.GetChildren(doParent) ) {
        DumpLogicalTree(child);
      }
    }

    void DumpVisualTree(DependencyObject parent) {
      string typeName = parent.GetType().Name;
      string name = (string)(parent.GetValue(FrameworkElement.NameProperty) ?? "");
      
      Debug.WriteLine(typeName);
      Console.WriteLine(name);

      for( int i = 0; i != VisualTreeHelper.GetChildrenCount(parent); ++i ) {
        DependencyObject child = VisualTreeHelper.GetChild(parent, i);
        DumpVisualTree(child);
      }
    }

  }
}
WPF Logical Visual Tree Sample








24.48.UI Element
24.48.1.Parent and child timelines with default HoldEnd FillBehaviorParent and child timelines with default HoldEnd FillBehavior
24.48.2.Freezables and elementFreezables and element
24.48.3.Define a resource at the page root level on a FrameworkElement and reference itDefine a resource at the page root level on a FrameworkElement and reference it
24.48.4.Print Logical TreePrint Logical Tree
24.48.5.Print Visual TreePrint Visual Tree
24.48.6.Find enclosure componentFind enclosure component
24.48.7.Logical Visual Tree SampleLogical Visual Tree Sample
24.48.8.About Dialog with Tree WalkingAbout Dialog with Tree Walking
24.48.9.Point Hit Test with VisualTreeHelper.HitTestPoint Hit Test with VisualTreeHelper.HitTest
24.48.10.Find inner visual elementFind inner visual element
24.48.11.Print Visual(Canvas)Print Visual(Canvas)
24.48.12.Change control background in mouse enter and leaveChange control background in mouse enter and leave
24.48.13.Changing graphical elementsChanging graphical elements
24.48.14.Change the Visibility property of a UIElement.Change the Visibility property of a UIElement.
24.48.15.Change FillChange Fill
24.48.16.Extend FrameworkElement to create your own shape
24.48.17.Dump Content Property Attributes