WPF中的逻辑树与可视树

MVVM WPF 树型图 1,树形图功能图 2,树形图代码,他的实现功能都是靠事件来实现,简单的例子代码, 1,在TextBlock 文本字段写Click事件,给他个名称, 2,给他事件,给他个类,导航他的名称,每个事件名称可以控制导航, 1,每个事件名称,都可以导航, namespace DFZXHotelss.V 阅读详情

      这部分的内容来自于即将出版的新书《WPF Unleashed》的第三章样章。关于什么是逻辑树,我们先看下面的一个伪XAML代码的例子:

<Window ......>
     <StackPanel>
      <Label>LabelText</Lable>
     </StackPanel>
</Window>

 

      在这样一个简单UI中,Window是一个根结点,它有一个子结点StackPanel。而StackPanel有一个子结点Label。注意Label下还有一个子结点string(LabelText),它同时也是一个叶子结点。这就构成了窗口的一个逻辑树。逻辑树始终存在于WPF的UI中,不管UI是用XAML编写还是用代码编写。WPF的每个方面(属性、事件、资源等等)都是依赖于逻辑树的。

 

      可视树基本上是逻辑树的一种扩展。逻辑树的每个结点都被分解为它们的核心视觉组件。逻辑树的结点对我们而言基本是一个黑盒。而可视树不同,它暴露了视觉的实现细节。下面是Visual Tree结构就表示了上面四行XAML代码的视觉树结构:

 

 

 

      并不是所有的逻辑树结点都可以扩展为可视树结点。只有从System.Windows.Media.Visual和System.Windows.Media.Visual3D继承的元素才能被可视树包含。其他的元素不能包含是因为它们本身没有自己的提交(Rendering)行为。

 

      在Windows Vista SDK Tools当中的XamlPad提供查看Visual Tree的功能。需要注意的是XamlPad目前只能查看以Page为根元素,并且去掉了SizeToContent属性的XAML文档。如下图所示:

 

 


      注意图中工具栏特别标记的地方。我们可以看到Visual Tree确实比较复杂,其中还包含有很多的不可见元素,比如ContentPresenter。Visual Tree虽然复杂,但是在一般情况下,我们不需要过多地关注它。我们在从根本上改变控件的风格、外观时,需要注意Visual Tree的使用,因为在这种情况下我们通常会改变控件的视觉逻辑。

 

      WPF中还提供了遍历逻辑树和可视树的辅助类:System.Windows.LogicalTreeHelper和System.Windows.Media.VisualTreeHelper。注意遍历的位置,逻辑树可以在类的构造函数中遍历。但是,可视树必须在经过至少一次的布局后才能形成。所以它不能在构造函数遍历。通常是在OnContentRendered进行,这个函数为在布局发生后被调用。

 

      其实每个Tree结点元素本身也包含了遍历的方法。比如,Visual类包含了三个保护成员方法VisualParent、VisualChildrenCount、GetVisualChild。通过它们可以访问Visual的父元素和子元素。而对于FrameworkElement,它通常定义了一个公共的Parent属性表示其逻辑父元素。特定的FrameworkElement子类用不同的方式暴露了它的逻辑子元素。比如部分子元素是Children Collection,有是有时Content属性,Content属性强制元素只能有一个逻辑子元素。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/laiyiling/archive/2007/01/12/1481498.aspx

WPF中逻辑树和可视树的遍历 逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成。其显著的特点就是由布局控件、或者其他常用的控件组成,逻辑树使用LogicalTreeHelper类遍历 可视树是由界面上可见的元素构成的,这些元素主要是由从Visual或者Visual3D类中派生出来的类, 可视树使用VisualTreeHelper类遍历 在XAML中界面左边显示逻辑树,右边显示可视树 添加类,用... 阅读详情

相关推荐

WPF可视树和逻辑树

什么是逻辑树,逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成,最显著的特点就是由布局控件、或者其他常用的控件组成 从上面的代码中可以看出,Window、Grid、StackPanel、TextBox其实就是XAML界面的逻辑树 什么是可视树,可视树是由界面上可见的元素构成的,这些元素主要是由从Visual或者Visual3D类中派生出来的类,上面代码中的Wind...

weixin_44588733的博客 361

WPF 逻辑树和可视化树

逻辑树: 逻辑树是在 WPF 框架级别定义,它主要是为了描述一个“界面对象”的构建过程,相当于对象族谱;抽象的名字和相对的位置关系。它是由 WPF 基元素是 FrameworkElement 或 FrameworkContentElement构成。 在逻辑树中也可以看到 TextBlock 的 Text 值,该值是一个字符串。 可视化树:可视化树是逻辑树概念的扩展,提供了一个更详细的可

ilipan的专栏 1735

WPF中可视化树和逻辑树的区别是什么

简单来说,逻辑树是你在XAML或代码中定义的元素和它们的父/子关系,而可视化树则是这些元素实际上的视觉和渲染表示。:当一个元素尝试查找一个资源(如颜色、字体等)时,它会首先在自己的资源字典中查找,如果没有找到,它会在逻辑树中向上查找,直到找到匹配的资源或者到达树的顶部。注意,每一个逻辑树节点可能有一个或多个对应的可视化树节点,但并非所有的可视化树节点都有一个对应的逻辑树节点。例如,当你在一个按钮上单击时,总的来说,理解逻辑树和可视化树,以及它们在WPF中的作用和区别,对于深入理解WPF是非常重要的。

琅嬛福地 1346

WPF学习(2) – 逻辑树和可视树、依赖属性、附加属性、路由事件、命令

1. 逻辑树和可视树 XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性。在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树 逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性、事件、资源等)都有与逻辑树相关联的行为。例如,属性值有时会沿着树自动传递给子元素,而触发的事件可以自底向上或自顶向下遍历树. 可视树基本上是逻辑树的扩展,在可视树中,节点都被...

weixin_34355881的博客 234

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

本文详细解析了企业微信群机器人的Webhook配置全流程,从创建机器人、获取关键Webhook地址,到使用代码发送文本、Markdown等多种消息类型。内容涵盖安全加固、错误处理及与CI/CD等系统集成的实战指南,帮助企业快速构建高效、稳定的内部通知系统。

ik678901的博客 1787

移远EC20模块USB模式切换的底层逻辑与驱动适配探秘

本文深入探讨了移远EC20模块USB模式切换的底层逻辑与驱动适配机制,详细解析了AT命令控制下的USB0与WWAN0模式差异。通过分析USB协议栈、内核驱动框架及网络子系统的交互,提供了模式切换的完整操作流程和常见问题解决方案,助力开发者优化4G通信模块在嵌入式设备中的稳定连接。

cc789的博客 845

wpf MindFusion 炫酷的图形表示,各种CFG,各种Tree 随手拈来

最近在做android app cfg的项目,最终shiyoa

desword-- 技术,杂文。 1118

手把手教你用AFL挖掘C程序漏洞:从安装到实战(附常见错误排查)

本文详细介绍了如何使用American Fuzzy Lop (AFL)对C/C++程序进行模糊测试,从环境准备、目标程序插桩编译、初始语料库构建到实战运行与结果分析。重点讲解了AFL的安装、常见错误排查(如核心转储配置、执行速度优化)以及提升测试效率的高级策略(如持久模式、并行化),帮助开发者和安全工程师高效挖掘程序漏洞。

weixin_29014237的博客 408

WPF逻辑树与可视树

开发工具与关键技术:Visual Studio 2015 作者:王成 撰写时间:2019年5月3日 主页面:1、界面左边显示逻辑树,右边显示可视树,代码如下: <Grid> <DockPanel> <Button DockPanel.Dock="Top" Click="Button_Click" Content="获取逻辑树和可视树"><...

weixin_44545511的博客 317

TDDFT计算软件Octopus学习笔记(二):基态计算(Si)

本文以硅为例,来进行基态计算。

陈啸的博客 7308

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6504

WPF学习(4)逻辑树和可视树

前面几节说了一些WPF的基础,包括XAML和布局等。在接下来的几节,我们来说说WPF的核心概念,包括逻辑树和可视树、依赖对象和依赖属性、路由事件、命令这几个部分。本节介绍下逻辑树(Logical Tree)和可视树(Visual Tree)。 逻辑树和可视树 在WPF中,用户界面是由XAML来呈现的。粗略地讲,从宏观上看,叶子为布局组件和控件所组成的树既是逻辑树,从微观上看,将逻辑树的叶子再...

weixin_30838873的博客 276

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

WPF的**逻辑树**和**可视树**。

在WPF中,你可以通过代码访问和操作逻辑树和可视树,类似于在前端中操作DOM。例如,你可以使用`VisualTreeHelper`类来遍历可视树,或者使用`LogicalTreeHelper`类来遍历逻辑树。- 可视树是逻辑树的一个扩展,它包含了所有可视元素的详细信息,包括控件的渲染和布局信息。在这个示例中,`TraverseLogicalTree`方法递归地遍历逻辑树,并输出每个元素的类型名称。在WPF中,这个概念被称为**逻辑树**和**可视树**。它类似于前端中的DOM树,表示页面的结构。

jackfb2012的专栏 848

2019年高教社杯全国大学生数学建模竞赛 C 题:《机场的出租车问题》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 3453

5、数据计算与处理技巧全解析

本文深入解析了Tableau中的多种数据计算与处理技巧,涵盖LOD计算、日期与字符串处理、计数优化、数据混合限制及自定义总计等核心内容。通过实际案例和流程图,系统讲解了各技巧的应用场景、实现步骤与注意事项,并提供性能优化建议和常见问题解答,帮助用户提升数据分析效率与可视化精度。同时展望了未来数据计算技术的发展趋势,是Tableau用户进阶必备的全面指南。

peach的博客 82

WPF-10 逻辑树和可视化树

我们在WPF-03 资源之Resources结尾中介绍逻辑树和可视化树的基本概念,我们这节来介绍这两棵树逻辑树(Logical Tree)逻辑树是由每个控件的节点组成,本质上就是XAML文件中的UI元素,我们可以通过LogicalTreeHelper类提供的静态方法获取逻辑树的对象,我们通过一个例子演示获取整个页面逻辑树<Window x:Class="Example_10.Represen...

dotNET跨平台 587

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WPF元素树操作完全指南:逻辑树与可视树的10个核心技巧

WPF元素树是Windows Presentation Foundation的核心概念,掌握逻辑树与可视树的操作技巧对于构建高效、可维护的WPF应用程序至关重要。本指南将深入解析WPF元素树的工作原理,并提供10个实用技巧帮助你精通元素树操作。 ## 什么是WPF元素树?🤔 WPF应用程序的UI由两个并行的树结构组成:**逻辑树**和**可视树**。逻辑树代表了XAML中声明的元素层次结构,

gitblog_00725的博客 360

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WPF的可视树与逻辑树

XAML天生就是用来呈现用户界面的,这是由于它具有层次化的特性。在WPF中,用户界面由一个对象树构建而成,这棵树叫作逻辑树。逻辑树的概念很直观,但是为什么要关注它呢?因为几乎WPF的每一方面(属性、事件、资源等)都有与逻辑树相关联的行为。例如,属性值有时会沿着树自动传递给子元素,而触发的事件可以自底向上或自顶向下遍历树。 与逻辑树类似的一个概念是可视树。可视树基本上是逻辑树的扩展,在可视树中,节

yinyiniao(Leo)'s blog 4482

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WPF 可视化树和逻辑树

自开始接触WPF开始一直对可视化树和逻辑树没有清晰地认识和区别,下面进行一次总结。学海无涯,开始吧!!! 背景 目前SDK文档中关于视觉树和逻辑树的介绍还不是很完全。 事实证明WPF中的元素树相当复杂而且要求WPF类库中很底层的知识来理解这些树。怎样用通用的方式遍历元素树;你觉得在什么地方无法得知元素成分;这些并不像看起来那么简单。不幸的是,WPF没有暴露接口来简化对元素树的遍历。...

qq_23018459的博客 2985

WPF中的可视树和逻辑树

1、以当前控件为节点,往上层级的树走即是可视树,往控件内部细化是可视树。2、可视树是逻辑树的一种扩展。3、WPF的每个方面(属性、事件、资源等等)都是依赖逻辑树的。4、只有是从System.Windows.Media.Visual和System.Windows.Media.Visual3D继承的元素才能被可视树包含。5、遍历逻辑树和可视树的辅助类:System.Windows.LogicalTre...

u013823548的博客 611

wpf之逻辑树与可视树

向上向下查找控件时,我们会用到逻辑树和可视树,如:LogicalTreeHelper.GetParent(itemContainer) as Panel或者VisualTreeHelper.GetParent(itemContainer) as Panel。那么,到底什么是逻辑树,什么是可视树呢? 打开XamlPadX,在xaml中敲入一行代码<Label Content="he...

anqian5023的博客 217

WPF路由事件一:逻辑树和可视树(转)

WPF路由事件一:逻辑树和可视树 一、什么是逻辑树 逻辑树就是描述WPF界面元素的实际构成,它是由程序在XAML中所有的UI元素组成。最显著的特点就是由布局控件、或者其他常用的控件组成。 1 <Window x:Class="WpfRouteEvent.MainWindow" 2 xmlns="http://schemas.microsoft...

weixin_30938149的博客 111

WPF自学(二)-WPF逻辑树和可视树

本文 可视化树 可视化树代表你界面上所有的渲染在屏幕上的元素。可视化树用于渲染,事件路由,定位资源(如果该元素没有逻辑父元素)等等等等。向上或者乡下遍历可视化树可以简单的使用VisualTreeHelper和简单的递归方法。 例如: DependencyObject FindVisualTreeRoot (DependencyObject initial) { DependencyOb...

qinzheng_chen的博客 477

WPF (逻辑树和可视化树)

WPF中有两中“树”:一种叫逻辑树(Logical Tree);一种叫可视化元素树(Visual Tree)。 Logical Tree 最显著的特点就是它完全由布局组件和控件构成(包括列表类控件中的条目元素),换句话说就是它的每个节点不是布局组件就是控件。那什么是 Visual Tree 呢?我们知道,如果把一片树叶放在放大镜下观察,你会发现这片叶子也像一棵树一样——有自己的基部并向上生长出多级分叉。 在WPF的Logical Tree 上,充当叶子的...

breakbridge的博客 2563
上一篇: 最优化WPF 3D性能(基于“Tier-2”硬件)
下一篇: 卸载Microsoft Security Essentials(MSE)的方法
wmjcom
博客等级 码龄24年 71粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值