xaml代码:

<Window x:Class="WpfApplication1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"Loaded="Window_Loaded_1"><Grid><Button Content="button" Margin="179,131,206,150"></Button></Grid>
</Window>

后台cs代码:

        private void Window_Loaded_1(object sender, RoutedEventArgs e){StringBuilder tree = new StringBuilder();PrintVisualTree(this, 0, tree);Console.WriteLine("VisualTree:");Console.WriteLine(tree.ToString());tree.Clear();PrintLogicalTree(this, 0, tree);Console.WriteLine("LogicalTree:");Console.WriteLine(tree.ToString());}public void PrintVisualTree(DependencyObject obj, int level, StringBuilder tree){tree.AppendLine(new string(' ', level) + obj);for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++){PrintVisualTree(VisualTreeHelper.GetChild(obj, i), level + 1, tree);}}public void PrintLogicalTree(DependencyObject obj, int level, StringBuilder tree){tree.AppendLine(new string(' ', level) + obj);foreach (var v in LogicalTreeHelper.GetChildren(obj)){if (v is DependencyObject){PrintLogicalTree(v as DependencyObject, level + 1, tree);}}}//输出
VisualTree:
WpfApplication1.MainWindowSystem.Windows.Controls.BorderSystem.Windows.Documents.AdornerDecoratorSystem.Windows.Controls.ContentPresenterSystem.Windows.Controls.GridSystem.Windows.Controls.Button: buttonMicrosoft.Windows.Themes.ButtonChromeSystem.Windows.Controls.ContentPresenterSystem.Windows.Controls.TextBlockSystem.Windows.Documents.AdornerLayerLogicalTree:
WpfApplication1.MainWindowSystem.Windows.Controls.GridSystem.Windows.Controls.Button: button

从视觉树的结构中可以看到,Button的Content是显示在TextBlock上的,所以,我们可以通过查找视觉树来修改Button的Content样式。

        private void buttonSunny_Click_1(object sender, RoutedEventArgs e){ChangeVisualTree<TextBlock>(this);}public void ChangeVisualTree<T>(DependencyObject obj) where T : FrameworkElement{if (obj is T){switch (typeof(T).Name){case "TextBlock":TextBlock textBlock = obj as TextBlock;textBlock.Background = Brushes.Yellow;textBlock.Foreground = Brushes.Brown;break;default:break;}}for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++){ChangeVisualTree<T>(VisualTreeHelper.GetChild(obj, i));}}

通过 WPF Inspector可以更加详细地了解WPF应用的树形结构和样式等,也可以修改样式,用法很简单,先运行WPF应用,然后打开WPF Inspector,等其加载完成之后,双击列表中的应用即可。

WPF遍历视觉树与逻辑树相关推荐

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

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

  2. WPF 视觉树和逻辑树区别,以及其子节点的遍历过程。

    一.定义上区分 1.添加元素的分类,称为逻辑树.解析:用window或者是application向下定位到组成界面的基本控件元素,就是逻辑树. 2.视觉树是逻辑树的拓展版本.解析:把逻辑树上的控件元素 ...

  3. WPF 可视化树和逻辑树

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

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

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

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

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

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

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

  7. WPF 逻辑树和可视化树

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

  8. 逻辑树与可视树[转]

    本章内容 l    逻辑树与可视树 l    依赖属性 l    路由事件 我们即将完成本书的第一部分,在开始一些真正有趣的话题之前,回顾一下之前介绍的一些主要概念是很有用的,这也是.NET程序员们所 ...

  9. WPF-10 逻辑树和可视化树

    我们在WPF-03 资源之Resources结尾中介绍逻辑树和可视化树的基本概念,我们这节来介绍这两棵树 逻辑树(Logical Tree) 逻辑树是由每个控件的节点组成,本质上就是XAML文件中的U ...

最新文章

  1. ecshop中ajax的调用原理
  2. HTML(六)——表单验证、正则表达式、事件
  3. Ubuntu18 的日常
  4. java中判断Object对象类型
  5. “天才”辈出的全国青少年科技大赛
  6. GitHub 近 100,000 程序员“起义”:向“996”开炮!
  7. 永洪Desktop自由表格间计算使用教程
  8. 选择器Selector
  9. java 移动页面中的图片上传_移动端上传图片(ajax跨域请求)
  10. PHP笔记-订货单例子
  11. ubuntu关闭服务需要身份验证
  12. AD画电路的踩坑点——继电器线圈的正负性以G6K-2F-Y为例
  13. 在DataTable中执行DataTable.Select(条件),
  14. Oracle:ODP.NET Managed 小试牛刀
  15. MyBatis学习总结[5]-动态 SQL
  16. ArcGIS操作小技巧(四)之拓扑工具条灰色无法操作
  17. 解决连接kudu时,delaying RPC due to Service unavailable: Master config (**.**.**.**:7051) has no leader
  18. windows通过资源管理器访问服务器(samba服务),您需要权限来执行此操作
  19. 一行代码能实现什么丧心病狂的功能?
  20. snprintf_s解释

热门文章

  1. 【Hive】Hive数据倾斜以及解决方案
  2. 计算机专业该如何找实习工作?迷茫、不知所措的你值得一看~
  3. 教你解决微信跳转appstore的困扰
  4. 五子棋 手打稍加改变自慕课网hyman
  5. thinkphp项目中think文件夹所在的目录use think\Request;------潘万丁
  6. 修己,以清心为要。涉世,以慎言为先。
  7. 单词快速记忆day 1
  8. (2020李宏毅)机器学习-Explainable Machine Learning
  9. 如何禁止搜索引擎收录WordPress站点某个分类的文章?
  10. 移动端(一)—— 移动端概念