WPF 中的树应用

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)).



            

原文地址:https://www.cnblogs.com/denglinhai/p/1207911.html