MSDN中描述:
在许多技术中,元素和组件按照树结构的形式组织,在这种结构中,开发人员可以直接操作树来影响应用程序的呈现。Windows Presentation
Foundation (WPF) 还使用了多个树结构术语来定义程序元素之间的关系。
在项目中,我们要使WPF应用程序多语言。那么就要了解要多语言的内容在xaml文件中的位置。那么我们必须要读取xaml文件信息。
MSDN中描述:
WPF 中主要的树结构是元素树。如果使用 XAML
创建应用程序页,则将基于标记中元素的嵌套关系创建树结构。如果使用代码创建应用程序,则将基于为属性(实现给定元素的内容模型)指定属性值的方式创建树结构。在
Windows Presentation Foundation (WPF)
中,处理和使用概念说明元素树的方法实际上有两种:即逻辑树和可视化树。逻辑树与可视化树之间的区别并不始终很重要,但在某些 WPF
子系统中它们可能会偶尔导致问题,并影响您对标记或代码的选择。
尽管您不会始终直接操作逻辑树或可视化树,但理解树之间如何进行交互的概念也是理解 WPF 中的属性继承和事件路由如何工作的一种方法。
WPF是在xml的标准上实现的,它有两种方法处理元素树(逻辑树、可视树)。而在查找资源时我们通常使用逻辑树。在代码中,我们要读取xaml文件,我们要解剖window对象。然后一成一成的分析window里面的子对象。
MSDN中有描述:
Windows Presentation Foundation (WPF) 中的大部分类都从四个类派生而来,这四个类在 SDK
文档中常常被称为基元素类。这些类包括 UIElement、FrameworkElement、ContentElement 和
FrameworkContentElement。DependencyObject
也是一个相关类,因为它是 UIElement 和 ContentElement 的通用基类。
UIElement 和 ContentElement 都是从
DependencyObject 派生而来
重点:Window对象也是DependencyObject类型。
1、递归window对象里面的子对象
IEnumerable ienum = this.GetChildren(WindowObj);
foreach (object obj in ienum)
{
DependencyObject childVisual = obj as DependencyObject;
......
2、分析每个对象
switch (obj.GetType().FullName)
{
case "System.Windows.Controls.Label":
string labelContent=(obj as Label).Content;
break;
......
3、LogicalTreeHelper
类为逻辑树遍历提供 GetChildren、GetParent
和 FindLogicalNode
方法。不清楚FindName是不是其中的一个。在使用FindName时,你可能发现FindName无效,那么可能是你动态添加控件的时候是否注册了控件(parentObj.RegisterName(objname,obj)).