WPF 概述
WPF 全称是:Windows Presentation Foundation,直译为Windows表示基础。WPF是专门为GUI(Graphic User Interface)程序开发设计的。
在过去很多年,用于GUI开发的技术一直都在改进。不管是Windows Form,还是Visual Basic 6等等,在底层都是使用Windows的 User32,GDI/GDI+ 这2个部分来构建用户界面。而WPF中,底层的图形技术不再是GDI/GDI+ ,而是DirectX。不管是用WPF绘制简单的文本框、按钮,还是到复杂的3D图形效果,都是采用DirectX完成的。
如果要保证在WPF中获得硬件加速功能,必须保证为显卡安装了本地的WDDM(Windows Display Driver Model)驱动。如果你是Windows Vista,或者Windows 7 已经以上版本,就不用担心这个功能的缺失,系统已经集成了WDDM。
WPF还有一个重要的特征就是分辨率的无关性:WPF可以根据系统的DPI设置,非常灵活的放大或者缩小内容,以适应所有的显示器和显示选择。可以看看http://www.wpflearningexperience.com/?p=41这个地址的讨论。
下面来看看WPF的体系结构:
PresentationFramework:包含了WPF顶层的类型,比如窗口、面板等。还实现了高层的抽象,如样式。
PresentationCore:包含了基础类型,如UIElement类和Visual类。
WindowsBase:DispatcherObject和DependencyObject都在其中定义。
milcore:是非托管代码实现的。是WPF渲染系统的核心,将可视化元素转换为DirectX所期望的三角形和纹理。可以看出是WPF的一部分,但是同时也是操作系统的一个核心组件。
DirectX:WPF所有的的可见元素都是由他进行创建。
User32:仍被作为WPF的一部分,仅作为决定程序占有桌面的那一部分。
下面来看看WPF的类图:
DispatcherObject:WPF使用的是STA(single-thread affinity)模型的。不能在线程里面直接更新用户界面,通常需要使用线程同步上下文。WPF有专门的线程模型,后面有机会再讲到。
DependencyObject:通过继承该类,获得对依赖属性的支持。
Visual:任何继承自该类的类都可以在界面上显示出来,如不想使用高级的WPF特性,可以使用该类。
UIElement:为WPF提供LIFE支持(Layout、Input、Focus、Event)。属于WPF的核心级别。
FrameworkElement:是 WPF 框架级别实现类,该类建立在 UIElement 基础上,并添加了与 WPF 框架级别的特定交互。并添加了更多的布局特征,样式支持,动画支持等。
Shape:基本的形状类。包括Rectangle、Ellipse、Line等。
Panel:所有布局容器的基类。包括StackPanel、DockPanel、WarpPanel、Grid、Canvas等。
Control:WPF中,所有可视化内容都被称为元素;只有少部分元素才能称为控件;控件是那些能够接收焦点并于用户交互的元素。记住这一点很重要。该类中最重要的是提供了控件的模板支持。
ContentControl:所有单一内容的控件的基类。单一内容是指,只能有一个顶级元素,不能同时存在多个。
ItemsControl:所有显示选项集合的基类。如ListBox、TreeView等。
更详细的类层次结构可以看:http://blogs.interknowlogy.com/2007/05/02/wpf-class-library-reference-poster/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端