WPF体系结构

WPF使用多层体系结构。在顶层,应用程序与完全由托管C#代码编写的一组高层服务进行交互。至于将.NET对象转换为Direct3D纹理和三角形的实际工作,是在后台由一个名为milcore.dll的低级非托管组件完成。

上图显示了WPF应用程序中各层的工作情况。

PresentationFramework.dll包含WPF顶层的类型,包括那些表示窗口、面板以及其他类型控件的类型。它还实现了高层编程抽象,如样式。开发人员直接使用的大部分类都来自这个程序集。

PresentationCore.dll包含了基础类型,如UIElement类和Visual类,所有形状类和控件类都继承自这两个类

WindowsBase.dll包含了更多基本要素,这些要素具有在WPF之外重用的潜能,如DispatcherObject类和DependencyObject类,这两个类引入了依赖项属性。

milcore.dll是WPF渲染系统的核心,也是媒体集成层(Media Integration Layer)的基础。

WindowsCodecs.dll是一套提供图像支持的低级API。

Direct3D是一套低级API,WPF应用程序中的所有图形都由它进行渲染。

User32用于决定哪些程序实际占有桌面的哪一部分,所有它扔被包含在WPF中,但是不再负责渲染通用控件。

构成WPF基本控件集合的类的层次结构

WPF的主要类

System.Threading.DispatcherObject类

WPF应用程序使用单线程亲和(Single-Thread Afinity,STA)模型,意味者整个用户界面由单个线程拥有。从另一个线程与用户界面元素进行交互是不安全的。为方便使用此模型,每个WPF应用程序由协调消息(键盘输入,鼠标移动乃至框架处理,如布局)的调度程序管理。通过继承自DispatcherObject类,用户界面的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序为用户界面线程封送代码。

System.WindowsDependencyObject类

在WPF中,主要通过属性与屏幕上的元素进行交互。通过继承自DependencyObject类,WPF类可以获得对依赖项属性的支持。

System.Windows.Media.Visual类

在WPF窗口中显示的每个元素本质上都是Visual对象。可以将Visual类视为绘图对象,其中封装了绘图指令、如何执行绘图的附加细节以及基本功能。Visual类还在托管WPF库和渲染桌面的milcore.dll程序集之间提供了链接。任何继承自Visual的类都能在窗口上显示出来。

System.Windows.UIElement类

UIElement类增加了对WPF本质特征的支持,如布局、输入、焦点和事件。与属性类型,WPF实现了增强的称为路由事件的事件路由系统。

System.Windows.FrameworkElement类

FrameworkElement类实现了一些全部由UIElement类定义的成员。如,UIElement类为WPF布局系统设置了基础,但是FrameworkElement类提供了支持它的重要属性(如HorizontalAlignment和Margin属性)。UIElement类还添加了对数据绑定、动画以及样式等核心特性的支持。

System.Windows.Shapes.Shape类

基本的形状类(如Rectangle类,Polygon类,ellipse类、Line类和Path类)都继承自该类。

System.Windows.Controls.Control类

控件(control)是可以与用户进行交互的元素。控件显然包括TextBox类、Button类和ListBox类等。Control类为设置字体以及前景色与背景色提供了附加属性。通过模板支持,可以使用自定义风格的绘图替换控件的标准外观。

System.Windows.Controls.ContentControl类

ContentControl类是所有具有单一内容的控件的基类,包括简单的标签乃至窗口的所有内容。控件中的单一内容可以是普通字符穿乃至具有其他形状和控件组合的布局面板

System.Windows.Controls.ItemsControl类

ItemsControl类是所有显示选项的控件的基类,如ListBox和TreeView类。

System.Windows.Controls.Panel类

Panel类是所有布局容器的基类,布局容器是可包含一个或多个子元素、并按特定规则对子元素进行排列的元素。这些容器是WPF布局系统的基础,要以最富有吸引力、最灵活的方式安排内容,使用这些容器是关键所在。

原文地址:https://www.cnblogs.com/mengjiulong/p/9948862.html

时间: 2024-08-01 17:36:27

WPF体系结构的相关文章

WPF 体系结构

本主题提供 Windows Presentation Foundation (WPF) 类层次结构的指导教程, 涵盖了 WPF 的大部分主要子系统,并描述它们是如何交互的. 本主题还详细介绍了 WPF 架构师所做的一些选择. 本主题包括下列各节. System.Object System.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIE

(一):WPF体系结构

?? WPF的体系结构一般如下: (MSDN) (维基百科) 我们重点介绍下第2张图,它细化了第一张图的内容. 整个体系分为3层 1.托管WPF层 PresentatinFoundation 提供布局.样式.控件.2D.3D.文字.图像.动画.媒体.数据绑定.文档 PresentationCore 主要是MIL的托管包装,提供可视化系统,创建可视化树的一些类并负责渲染.比如Visual等核心类 CLR 大家熟知的公共语言运行时,提供内存管理.异常处理等. 2.媒体集成层 MIL 是非托管代码写成

WPF基础学习笔记整理 (一)

基础知识: WPF:Windows Presentation Foundation,用于Windows的现代图形显示系统: WPF用于编写应用程序的表示层: 引入“内置硬件加速”和“分辨率无关”: Silverlight是WPF的一个子集,是WPF的“网络版”(WPF/E): WPF的开发理念:“数据驱动”,数据驱动UI,数据第一,空间第二: 数据与界面之间的桥梁是Data Binding: MVVM:Model-View-ViewModel: XMAL:Extensible Applicati

WPF 基础面试题及答案(一)

一 · WPF由哪两部分组成? wpf 由两个主要部分 组成:引擎和编程框架. 1 引擎.wpf引擎是基于窗体的应用程序 图形 视频 音频和文档提供了一个单一的运行时库.重要的是WPF基于矢量的呈现引擎使应用程序可以灵活地利用高DPI监视器,支持图形的硬件加速. 2 框架.WPF框架为媒体 用户界面设计和文档提供大量的解决方案.wpf的设计考虑了可扩展性,使开发人员可以完全在WPF引擎的基础上创建自己的控件,也可以通过对现有WPF控件进行再分类来创建自己的控件. 二 · 什么是WPF? WPF英

WPF之旅 - 概述

WPF与之前出现的其他技术相比引入了“内置硬件加速”和“分辨率无关”等创新功能.WPF是一种成熟的技术,它是几个已经发布的.NET平台的一部分,并通过几个版本不断地进行完善(WPF3.0 -> WPF3.5 -> WPF3.5 SP1-> WPF4 -> WPF4.5). Windows图形演化 传统的Windows应用程序都依靠Windows操作系统提供的两个部分来创建界面: 1. User32:该部分为许多元素(如窗口,按钮和文本框)提供熟悉的Windows外观. 2. GDI

WPF(1)开始教程[译]

概要 在我使用了半年多 WPF 后,是时候写点关于 WPF 基础方面的东西了.我发表了一系列针对具体问题的文章.现在是到了让大家明白为什么说WPF是一款在界面开发上带来革命的产品了. 本文针对初级-中级程序员,所以我尽量给出一些基础的示例. WPF 介绍 就像名字表示的那样(WPF:Windows Presentation Foundation 直译为 Windows 图像基础),WPF是在 .NET Framework 3.0 引进的一个新框架,包含了很多可以更快速和方便地编写程序的类库.它使

WPF知识点全攻略06-WPF逻辑树(Logical Tree)和可视树(Visual Tree)

介绍概念之前,先来分析一段代码: xaml代码如下: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsof

.NET 体系结构(.net core、.net framework、xamarin之间的关系)

这是一张来自官方的图. 图中.NET FRAMEWORK..NET CORE和XAMARIN是三个不同的运行时,这三个运行时在.NET STANDARD LIBRARY之上,它们都包含一些基础的组件,像编译器.支持的开发语言(C#.F#等).运行时组件(类型系统.垃圾回收等).这三个运行时是同一类的东西,只不过侧重点不同..NET FRAMEWORK用于开发windows桌面程序.wpf和asp.net站点..NET CORE用于开发UWP(windows通用客户端)和跨平台的asp.net c

WPF 添加ACTIVEX 控件 ——System.Windows.Forms.AxHost+InvalidActiveXStateException异常

---恢复内容开始--- 一.ACTIVEX及其相关概念 COM(Component Object Model,对象组件模型): DCOM(Distributed COM,分布式对象组件模型): CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构): 动态数据交换(Dynamic Data Exchange,DDE),解决了数据的更新,但数据格式仍是问题: 对象的链接与嵌入(Object Linking and Embedde