一、定义上区分

1、添加元素的分类,称为逻辑树。解析:用window或者是application向下定位到组成界面的基本控件元素,就是逻辑树。

2、视觉树是逻辑树的拓展版本。解析:把逻辑树上的控件元素进行细分到更加仔细的构成部分,便是视觉树。

因此,有定义上看,逻辑树是框架描述意义上的,视觉树,填充了框架需要的所有细节的细节描述。视觉树的细节描述必须是在逻辑树的基础上的,不可能出现视觉树和逻辑相互独立的情况。

二、在视图上描述区分:

1、简单的window代码:

<Window>

<Grid>

<Button Content="Click me"/>

</Grid>

</Window>

2、上述代码的逻辑树:3、上述代码的视觉树

三、逻辑树和视觉树作用:

1、逻辑树:逻辑树描述了界面的整体框架;WPF大部分特性(属性值继承,事件路由以及样式)都是通过逻辑树进行工作的。

2、视觉树:视觉树描述了界面的所有细节;使用样式可以改变视觉树上的元素,可以使用Style.TargetType属性来选择希望修改的特定元素,甚至当空间属性发生变化时,通过触发器自动完成修改。可以为控件创建新的模板。

四、逻辑树和视觉树的子节点的遍历:

1、所需要的调用的类:逻辑树:System.Window.LogicalTreeHelper, 视觉树:System.Window.Media.VisualTreeHelper;

2、程序检测结果:

测试情况:在窗口的构建函数中调用遍历逻辑树的方法,在窗口的ContentRendered函数中调用视觉树遍历,起点是Window,在输出中没有体现出来。结果如下图:

逻辑树子节点遍历:

视觉树子节点遍历:

程序的界面:

部分重要的代码

//窗口的构造函数
 public MainWindow(){InitializeComponent();Console.WriteLine("LogicalTree Structure:");EnumLogicalTree(0,this);}private void Button_Click_1(object sender, RoutedEventArgs e){var temp =  VisualTreeHelper.GetDrawing(this);}public void EnumVisualTree(int index, Visual visual){for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++){Visual childVisual = (Visual)VisualTreeHelper.GetChild(visual, i);System.Console.WriteLine(new string(' ', index) + childVisual);EnumVisualTree(index+1, childVisual);}}public void EnumLogicalTree(int index, Object logical){if (!(logical is DependencyObject))return;foreach (object logicalChild in LogicalTreeHelper.GetChildren(logical as DependencyObject)){System.Console.WriteLine(new string(' ', index) + logicalChild);EnumLogicalTree(index + 1, logicalChild);}}private void Window_ContentRendered_1(object sender, EventArgs e){Console.WriteLine("VisualTree Structure:ContentRendered");EnumVisualTree(0, this);}

五、对于视觉树上的几个元素的简单解析:

1、AdornerDecorator,拥有Adorner,独立于布局之外的修饰器(修饰层),修饰层特殊的不可见的区域,但是覆盖在元素内容之上,主要是对焦点,鼠标,光标等等与布局无关的修饰描述。

2、ContentPresenter,简单理解:内容容器,其主要承载了窗口的内容(如上的:Grid,按钮)。

3、ClassicBorderDecorator,按钮中默认的对外框阴影的描述;(默认的模板)经过测试当按钮进行了模板修改时候,此处会消失,替换成了对新的模板的解析。

WPF 视觉树和逻辑树区别,以及其子节点的遍历过程。相关推荐

  1. 理解WPF中的视觉树和逻辑树

    理解WPF中的视觉树和逻辑树  Understanding the Visual Tree and Logical Tree in WPF 这篇文章讨论WPF中视觉树和逻辑树的细微差别.同时提供了一个 ...

  2. WPF 可视化树和逻辑树

    自开始接触WPF开始一直对可视化树和逻辑树没有清晰地认识和区别,下面进行一次总结.学海无涯,开始吧!!! 背景 目前SDK文档中关于视觉树和逻辑树的介绍还不是很完全. 事实证明WPF中的元素树相当复杂 ...

  3. 视觉树和逻辑树的概念

    逻辑树与视觉树属于WPF的基本概念,学过WPF或者Silverlight的朋友一定会对其有所耳闻,这篇文章将来探讨逻辑树与视觉树的特质以及两者的区别 WPF Inspector工具介绍 WPF Ins ...

  4. WPF,Silverlight与XAML读书笔记第六 - WPF新概念之一逻辑树与可视树

    说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. WPF中,XAML来呈现用户界面,其层次化的 ...

  5. pyqt 实现控件移除_pyqt5:删除树控件(QTreeWidget)的子节点/根节点

    主要代码 # 删除控件树子节点/根节点 def deleteItem(self): try: # 尝试删除子节点(通过其父节点,调用removeChild函数进行删除) currNode = self ...

  6. WPF遍历视觉树与逻辑树

    xaml代码: <Window x:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsof ...

  7. echarts树状图怎么设置主节点和子节点的距离_教你秒懂CAD出图比例正确设置技巧...

    1.你知道你用CAD画出的图打印出来会是多大吗? 2.你知道你图中标注文字打印出来字高是多少mm吗? 3.你能确定你画的1:100的图打印出来比例确实是1:100吗? 这个问题乍一看似乎简单,研究起来 ...

  8. 逻辑树与视觉树基本概念

    一. 摘要 逻辑树与视觉树属于WPF的基本概念,学过WPF或者Silverlight的朋友一定会对其有所耳闻,这篇文章 将来探讨逻辑树与视觉树的特质以及两者的区别 二.本文提纲 WPF Inspect ...

  9. WPF 逻辑树和可视化树

    逻辑树: 逻辑树是在 WPF 框架级别定义,它主要是为了描述一个"界面对象"的构建过程,相当于对象族谱:抽象的名字和相对的位置关系.它是由 WPF 基元素是 FrameworkEl ...

最新文章

  1. 华西生物医学大数据中心俞鹏课题组博士后招聘启事
  2. 小程序 获取用户信息
  3. FMCW毫米波雷达原理
  4. 使用Visual Studio Code设置Python开发环境
  5. ios 平滑移动view_解决页面使用overflow: scroll在iOS上滑动卡顿的问题
  6. 一种在旧代码上增加新需求的重构模式
  7. css hack 笔记 for ie8,ie7
  8. http和https的区别,不懂的一起研究【转】
  9. 物联网的“最好”与“最坏”之间往往只差了一个“安全”
  10. cad用计算机怎么计算坐标,CAD如何快速计算出图纸中任意点的坐标值
  11. 【Js】JavaScript数据类型隐式转换
  12. 九月英语--不同以往的感觉
  13. 日志报错:kernel: blk_update_request: I/O error, dev fd0, sector 0
  14. DEDE源码分析与学习---index.php文件解读。
  15. linux考试中的7654_7654支持的未启用卡指的是()
  16. 操作系统重点_重点:运动系统
  17. 2021年六级英文作文:China’s achievement in higher education.
  18. Unity-Live2d(表情系统,姿势动作与口型功能的实现)
  19. PCL读取ply文件
  20. Count Inversion逆序对数问题

热门文章

  1. Backtrader:用feather格式股票数据代替tushare进行数据回测
  2. java.lang.String_不兼容的类型:java.lang.String无法转换为Str...
  3. 微信中打开app store连接
  4. SQL计算月环比、月同比
  5. 2022年中国云计算面临的问题及发展前景预测分析
  6. 盘点PS使用小技巧。
  7. SIFT算法原理(2)-极值点的精确定位
  8. A blockchain‑based smart home gateway architecture for preventing data forgery
  9. python 保存数据为excel
  10. 计算机在英语中有哪些运用,计算机在英语教学中的运用