zoukankan      html  css  js  c++  java
  • WPF:逻辑树和视觉树

    通过下面的方式可以查看WPF的控件树,分为两种:逻辑树和视觉树。其中逻辑树是视觉树的子集。
            public Window1()
            {
                InitializeComponent();
    
    
    
                Debug.WriteLine("逻辑树");
                PrintLogicalTree(0, this);
    
    
            }
    
            protected override void OnContentRendered(EventArgs e)
            {
                base.OnContentRendered(e);
                Debug.WriteLine("视觉树");
    
                PrintVisualTree(0, this);
            }
    
            void PrintLogicalTree(int depth, object obj)
            {
                Debug.WriteLine(new string(' ', depth*2) + obj);
                if (!(obj is DependencyObject)) return;
                foreach (object child in LogicalTreeHelper.GetChildren(obj as DependencyObject))
                    PrintLogicalTree(depth + 1, child);
            }
            void PrintVisualTree(int depth, DependencyObject obj)
            {
                Debug.WriteLine(new string(' ', depth*2) + obj);
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                    PrintVisualTree(depth + 1, VisualTreeHelper.GetChild(obj, i));
            }

    运行结果如下

    逻辑树
    WpfApplication1.Window1
      System.Windows.Controls.Grid
        System.Windows.Controls.TextBox
        System.Windows.Controls.Label
        System.Windows.Controls.Button: Button
          Button
        System.Windows.Controls.Button: Button
          Button
        WpfApplication1.UserControl1
          System.Windows.Controls.Grid
            System.Windows.Controls.TextBox: Hello,World
              Hello,World


    视觉树
    WpfApplication1.Window1
      System.Windows.Controls.Border
        System.Windows.Documents.AdornerDecorator
          System.Windows.Controls.ContentPresenter
            System.Windows.Controls.Grid
              System.Windows.Controls.TextBox
                Microsoft.Windows.Themes.ListBoxChrome
                  System.Windows.Controls.ScrollViewer
                    System.Windows.Controls.Grid
                      System.Windows.Shapes.Rectangle
                      System.Windows.Controls.ScrollContentPresenter
                        System.Windows.Controls.TextBoxView
                          System.Windows.Media.DrawingVisual
                        System.Windows.Documents.AdornerLayer
                      System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
                      System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
              System.Windows.Controls.Label
                System.Windows.Controls.Border
                  System.Windows.Controls.ContentPresenter
                    System.Windows.Controls.TextBlock
              System.Windows.Controls.Button: Button
                Microsoft.Windows.Themes.ButtonChrome
                  System.Windows.Controls.ContentPresenter
                    System.Windows.Controls.TextBlock
              System.Windows.Controls.Button: Button
                Microsoft.Windows.Themes.ButtonChrome
                  System.Windows.Controls.ContentPresenter
                    System.Windows.Controls.TextBlock
              WpfApplication1.UserControl1
                System.Windows.Controls.Border
                  System.Windows.Controls.ContentPresenter
                    System.Windows.Controls.Grid
                      System.Windows.Controls.TextBox: Hello,World
                        Microsoft.Windows.Themes.ListBoxChrome
                          System.Windows.Controls.ScrollViewer
                            System.Windows.Controls.Grid
                              System.Windows.Shapes.Rectangle
                              System.Windows.Controls.ScrollContentPresenter
                                System.Windows.Controls.TextBoxView
                                  System.Windows.Media.DrawingVisual
                                System.Windows.Documents.AdornerLayer
                              System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
                              System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
          System.Windows.Documents.AdornerLayer

  • 相关阅读:
    metaClass
    First-class citizen
    class-metaclass-Class vs. type
    eval-Evaluation
    编程语言:数据+算法;
    线程的关系
    线程的核心是算法,是面向过程的
    多线程与控制结构-面向过程
    线程安全-上线文-运行环境
    面向对象的语言学本质
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1649043.html
Copyright © 2011-2022 走看看