WPF界面的架构

简介: 界面元素系统所描述的界面外观实际上是由视觉系统和文字系统所确定的,而输入系统以及属性系统的各运行逻辑的触发则是由用户在界面元素上的操作行为导致的。 一、界面元素系统用来展示WPF创建的向用户提供交互功能的程序界面。

界面元素系统所描述的界面外观实际上是由视觉系统和文字系统所确定的,而输入系统以及属性系统的各运行逻辑的触发则是由用户在界面元素上的操作行为导致的。

一、界面元素系统用来展示WPF创建的向用户提供交互功能的程序界面。该系统中包含了对用户界面的具体定义,如样式、布局、对齐方式、控件、绑定等。在该系统中的各个类实例基本上都是FrameworkElement类的派生类,而该类提供了许多基本功能,并通过重载等方式完成了对自身功能的定义。在界面元素系统中,重要的概念是元素树(Element Tree)。它用来表示用户界面中各元素之间的关系。元素树一共有两种类型:逻辑树(Logical Tree)和视觉树(Visual Tree)。逻辑树是在XAML或后台代码(如C#)中定义的各个界面元素之间的层次结构关系,它的结构与XAML文件中各元素的包含结构完全相同。视觉元素与XAML中声明的各个界面元素并不是完全对应的,该结构是用来表现视觉元素的树状结构的,逻辑树中的各个节点常常存在于视觉树中,这是因为界面元素常常是由多个视觉元素构成的。

二、视觉系统实际上是界面元素系统与消息交换层以及功能实现部分的中间层,只有通过该系统,界面元素中定义的各个功能才能真正执行。当一个消息到来的时候,该系统将通过功能实现层完成对界面元素的绘制。WPF中的文字系统是一个由WPF自己控制进行绘制的系统,而不再是对Windows自带文字系统的包装。在WPF使用矢量作为图像系统的前提下,每次对文字显示效果的计算结果将得到保存并在下一次对相同文字进行绘制时使用。对于渲染线程的存在以及渲染功能的实际实现,WPF内部是通过DirectX在单一线程中对界面进行绘制的,从界面元素表示到DirectX可接受输入的转化过程以及DirectX对各种效果的原生支持这两方面考虑,在DirectX没有将2D绘制和3D绘制系统合并之前,DirectX对2D图形的绘制主要是由基于点阵图像的DirectDraw完成的, WPF的矢量特性证明其内部实现接受的将是表示三角片元的矢量数据。

三、WPF所提供的输入系统提供了较原有的Win32消息系统的更多的输入类型支持,同时WPF本身也可以侦听手写输入及其他类型的输入消息。与WPF的输入系统密切相关的是路由事件,路由事件分为直接路由、向上路由和向下路由三种。其中直接路由就是在单一界面元素中触发却不被传递的消息执行行为,而向上和向下则表示在界面元素拓扑关系中的自内向外和自外向内的传递方式。按照消息级别来分,WPF中的输入消息分成两种:底层输入消息和高级输入消息。其中底层输入消息常常与用户的动作对应,例如WPF表示用户对按键敲击的事件是KeyDown。由于这些动作需要被更高层次的元素知晓,因此它是一个路由事件。而对于具有特定功能的控件,由于其功能的特殊性,常常引入一些具有特定功能的事件并对原有事件实行屏蔽。

四、属性系统是WPF中除视觉系统以外最重要的系统。该系统主要由三部分实现组成:更改通知、存储功能和表达式。更改通知是属性系统的最基本、最重要的功能。由于WPF主要通过属性驱动完成对界面效果的控制,因此WPF中的各种数据都尽量以属性的形式存在。对这些属性的更改常常驱动内部更新逻辑对其他数据进行相关的更改,因此WPF可以通过INotifyPropertyChanged接口完成属性更改通知功能。

五、消息交换层所完成的功能就是在视觉系统和功能实现部分传递信息,使视觉系统和功能有机地结合在一起。通过一个协议来提供了一个信息传递的通道,以在结构上使得视觉系统与功能实现相分离。该协议可以适用于网络,以使得程序逻辑可以在远程系统中执行,而将图像渲染工作留在本地完成。这样做可以非常有效地减少远程系统的数据传输量。

目录
相关文章
|
2月前
|
SQL 分布式计算 Hadoop
Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
【2月更文挑战第6天】Azkaban【基础 01】核心概念+特点+Web界面+架构+Job类型(一篇即可入门Azkaban工作流调度系统)
88 0
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
2891 0
|
9月前
|
C#
WPF做登陆界面
WPF做登陆界面
|
11月前
|
缓存 运维 Cloud Native
带你读《云原生架构白皮书2022新版》——基于云原生的新一代应用编程界面
带你读《云原生架构白皮书2022新版》——基于云原生的新一代应用编程界面
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
前端开发 C#
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF界面异常:未将对象引用设置到对象实例
WPF界面异常:未将对象引用设置到对象实例
|
XML C# 数据格式
Wix 安装部署教程(九) --用WPF做安装界面
原文:Wix 安装部署教程(九) --用WPF做安装界面       经常安装PC端的应用,特别是重装系统之后,大致分为两类。一类像QQ,搜狗输入法这样的。分三步走的:第一个页面可以自定义安装路径和软件许可。
1560 0
|
开发框架 Oracle 关系型数据库
C/S架构Winform插件化框架,Winform通用界面框架
插件化框架特点: 1. 开发框架以模块化形式在逻辑上解耦 2. 开发框架模块以动态链接库(DLL文件)形式独立部署。 3. 模块主界面(frmBaseModule)用来分割系统功能菜单与功能按钮,作为各模块的入口界面。 4. 插件化框架核心功能-动态加载模块技术。
2059 0
|
前端开发 C#
准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题
原文:准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题 题外话     不出意外,本片内容应该是最后一篇关于.Net技术的博客,做.Net的伙伴们忽喷忽喷。.Net挺好的,微软最近在跨平台方面搞的水深火热,更新也比较频繁,而且博客园的很多大牛也写的有跨平台相关技术的博客。
1204 0