zoukankan      html  css  js  c++  java
  • 【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 重写(可以检测影响布局的属性更改并将这些更改报告给任何内容宿主)。

  • 相关阅读:
    开源代码分析工具 good
    Qt5---ftp上传功能(使用组合的办法实现功能,QNetworkAccessManager自动管理分片上传,用QLoggingCategory屏蔽SSL警告)
    QT---基于WinPcap的局域网络管理工具(主机扫描、包过滤、ARP攻击、端口扫描)
    unity资源
    MVC5 EF6 Bootstrap3 HtmlHelper
    轻量级IOC框架Guice
    CloudNotes:一个云端个人笔记系统
    WeChatAPI 开源系统架构详解
    基础查询扩展
    ASP.NET 5 Hello World
  • 原文地址:https://www.cnblogs.com/ningth/p/1158249.html
Copyright © 2011-2022 走看看