一、WPF总体结构
Windows Presentation Foundation (WPF) 是 Microsoft .NET Framework 的一部分,用于构建丰富的桌面应用程序。它提供了一种统一的编程模型,用于构建现代的用户界面。
以下是 WPF 的主要组件和其关系:
-
PresentationFramework:这是 WPF 的核心库,它包含了所有基础用户界面元素(例如 Button, Window 等),数据绑定,事件系统,样式和模板等。
-
PresentationCore:这是一个底层库,它提供了一些基本的图形和动画的抽象,它和 PresentationFramework 一起工作,用于渲染用户界面。
-
WindowsBase:这是 WPF 的基础组件,它提供了些诸如依赖属性和依赖对象等基础机制,这些机制使得 WPF 的数据绑定和样式系统可以工作。
-
MilCore (Media Integration Layer):这是一个非托管代码库,它提供了直接与显卡驱动进行交互的能力,用于高效的渲染。
以上四个组件一起形成了 WPF 的基础架构。除此之外,WPF 还提供了诸如数据绑定,命令,控件模板和样式,动画和特效,文档和打印,和基于 XAML 的用户界面设计等高级特性。
在 WPF 的应用程序中,你通常会有以下的组件:
-
XAML:XAML 是一种标记语言,用于描述 WPF 的用户界面。你可以在 XAML 中定义窗口,控件,数据绑定等。
-
ViewModel:ViewModel 是一个实现了 INotifyPropertyChanged 接口的类,它包含了视图的状态和命令。
-
Model:Model 是你的业务逻辑和数据的表示。
这种分离的架构被称为 MVVM(Model-View-ViewModel),它是 WPF 应用程序的常见设计模式。
WPF类对象结构
在 WPF 中,所有的可视化元素都是一个大的对象层次结构,这些对象从 System.Object
继承而来,并逐渐形成 WPF 中的各种控件和元素。这种层次结构往往被称为 WPF 类层次结构。
以下是一个简化的 WPF 类层次结构:
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Control
System.Windows.Controls.ContentControl
System.Windows.Controls.Button
System.Windows.Controls.ItemsControl
System.Windows.Controls.ListBox
System.Windows.Controls.TextBox
System.Windows.Controls.Panel
System.Windows.Controls.StackPanel
System.Windows.Controls.Grid
System.Windows.Window
System.Windows.Shapes.Shape
System.Windows.Shapes.Rectangle
System.Windows.Shapes.Ellipse
System.Windows.ResourceDictionary
System.Windows.Style
System.Windows.Data.BindingBase
System.Windows.Data.Binding
System.Windows.Data.MultiBinding
这个层次结构中的每个级别都添加了新的功能或行为。例如:
-
DispatcherObject
提供了线程安全的操作。 -
DependencyObject
提供了依赖属性(Dependency Properties)系统。 -
Visual
是所有可视化元素的基类,提供了渲染支持。 -
UIElement
提供了布局,输入,焦点和事件等基础功能。 -
FrameworkElement
在UIElement
的基础上添加了数据绑定,样式和资源管理等功能。 -
Control
是所有控件的基类,提供了模板和用户交互等功能。 -
ContentControl
,ItemsControl
和Panel
是特定类型的控件,它们分别用于显示单一内容,多项内容和管理子元素的布局。 -
Shape
类及其派生类用于绘制图形。 -
Window
是顶级窗口的基类。 -
BindingBase
和其派生类用于数据绑定。
这个层次结构只是 WPF 类层次结构的一部分,实际的 WPF 类层次结构包含的类和接口的数量要多得多。