【WPF】WPF 体系结构

  • WPF 主要编程模型是通过托管代码公开的。
    CLR 提供一系列的功能,可以令开发效率更高并且更加可靠(包括内存管理、错误处理和通用类型系统等),但这是需要付出代价的。

    下图说明了 WPF 的主要组件。关系图的红色部分(PresentationFramework、PresentationCore 和 milcore)是 WPF 的主要代码部分。


    System.Object

    System.Threading.DispatcherObject
        WPF 中的大多数对象是从 DispatcherObject 派生的,这提供了用于处理并发和线程的基本构造。WPF 基于调度程序实现的消息系统。
        其工作方式与常见的Win32 消息泵非常类似;事实上,WPF 调度程序使用 User32 消息执行跨线程调用。

    System.Windows.DependencyObject
        生成 WPF 时使用的主要体系结构原理之一是首选属性而不是方法或事件。
        属性是声明性的,使您更方便地指定意图而不是操作。
        它还支持模型驱动或数据驱动的系统,以显示用户界面内容。
        这种理念的预期效果是创建您可以绑定到的更多属性,从而更好地控制应用程序的行为。

    System.Windows.Media.Visual
        定义一个系统后,下一步是将像素绘制到屏幕上。
        Visual 类用于生成可视化对象的树,每个对象可以选择性地包含绘制指令以及有关如何呈现这些指令(剪辑、变换等)的元数据。
        Visual 设计为极其轻量且灵活,所以大部分功能未进行 API 公开,并且极为依赖受保护的回调函数。
        Visual 实际上是到 WPF 组合系统的入口点。Visual 是以下两个子系统之间的连接点:托管 API 和非托管 milcore。

    System.Windows.UIElement
        UIElement 定义核心子系统,包括 Layout、Input 和 Event。

    System.Windows.FrameworkElement
        可以按两种不同的方式来看待 FrameworkElement。它对在 WPF 的较低层中的子系统引入一组策略和自定义项。它还引入了一组新的子系统。

    System.Windows.Controls.Control
         控件的最重要的功能是模板化。
        如果您将 WPF 的组合系统视为一个保留模式呈现系统,则控件可通过模板化以一种参数化的声明性方式描述其呈现。    
        ControlTemplate
    实际上不过是一个用于创建一组子元素的脚本,同时绑定到由控件提供的属性。
  • Windows Presentation Foundation (WPF) 中的大部分类都从四个类派生而来,这四个类在 SDK 文档中常常被称为基元素类。这些类包括 UIElementFrameworkElementContentElementFrameworkContentElementDependencyObject 也是一个相关类,因为它是 UIElementContentElement 的通用基类。
  • 如果您不是创建控件,并且需要从层次结构中较高的类进行派生,则可以参考下列各节的内容,了解每个基元素类定义了哪些特征。

            如果您创建从 DependencyObject 派生的类,则将继承以下功能:

                 GetValue 和 SetValue 支持以及一般的属性系统支持。
                 使用依赖项属性以及作为依赖项属性实现的附加属性的能力。

            如果您创建从 UIElement 派生的类,则除了能够继承 DependencyObject 提供的功能外,还将继承以下功能:

                 对动画属性值的基本支持。有关更多信息,请参见动画概述。
                 对基本输入事件和命令的支持。有关更多信息,请参见输入概述和命令概述。
                 可以重写以便为布局系统提供信息的虚方法。

            如果您创建从 FrameworkElement 派生的类,则除了能够继承 UIElement 提供的功能外,还将继承以下功能:

                 对样式设置和演示图板的支持。有关更多信息,请参见 Style 和演示图板概述。
                 对数据绑定的支持。有关更多信息,请参见数据绑定概述。
                 对动态资源引用的支持。有关更多信息,请参见资源概述。
                 对属性值继承以及元数据中有助于向框架服务报告属性的相关情况(如数据绑定、样式或布局的框架实现)的其他标志的支持。有关更多信息,请参见框架属性元数据。
                 逻辑树的概念。有关更多信息,请参见 WPF 中的树。
                 对布局系统的实际 WPF 框架级实现的支持,包括 OnPropertyChanged 重写(该重写可以检测到影响布局的属性更改)。

            如果您创建从 ContentElement 派生的类,则除了能够继承 DependencyObject 提供的功能外,还将继承以下功能:

                 对动画的支持。有关更多信息,请参见动画概述。
                 对基本输入事件和命令的支持。有关更多信息,请参见输入概述和命令概述。

            如果您创建从 FrameworkContentElement 派生的类,则除了能够继承 ContentElement 提供的功能外,还将获得以下功能:

                 对样式设置和演示图板的支持。有关更多信息,请参见 Style 和动画概述。
                 对数据绑定的支持。有关更多信息,请参见数据绑定概述。
                 对动态资源引用的支持。有关更多信息,请参见资源概述。
                 对属性值继承以及元数据中有助于向框架服务报告属性情况(如数据绑定、样式或布局的框架实现)的其他标志的支持。有关更多信息,请参见框架属性元数据。
                 您不会继承对布局系统修改(如 ArrangeOverride)的访问权限。布局系统实现只在 FrameworkElement 上提供。但是,您会继承 OnPropertyChanged 重写(可以检测影响布局的属性更改并将这些更改报告给任何内容宿主)。

原文地址:https://www.cnblogs.com/ningth/p/1158249.html