WPF包含上千个类,有很深的层次结构。为了帮助理解类之间的关系
下图展示了WPF的层次结构
DispatcherObject类
Dispatcher是一个抽象基类,用于绑定到一个线程上的类。与Windows窗体类似,WPF也要求仅从创建线程中调用方法和属性。WPF应用程序使用为人熟知的单线程亲和(Single-Thread Affinity,STA)模型,这意味着整个用户界面由单个线程拥有。从另一个线程与用户界面进行交互是不安全的。通过继承自DispathcerObject类,用户界面中的每个元素都可以检查代码是否在正确的线程上运行,并能通过访问调度程序为用户界面线程封送代码。
Application类
在WPF应用程序中,会创建Application类的一个实例.这个类实现了Singleton模式,用于访问应用程序的窗口,资源和属性
DependencyObject类
DenpendencyObject是所有支持依赖属性的类的基类。依赖属性可以依赖其他输入,例如主题和用户喜好。依赖属性与数据绑定,动画,资源和样式一起使用。
Visual类
所有可见元素的基类都是Visual。这个类包含点击测试和转换等特性
UIElement类
所有需要基本显示功能的WPF元素的抽象基类是UIElement。这个类提供了鼠标移动,拖放,按键的通道和起泡事件;提供了可以由派生类重写的虚显示方法;以及布局方法。WPF不再使用Window句柄,这个类就可以用Window句柄
FrameworkElement类
FrameworkElement派生自基类UIElement,实现了由基类定义的方法的默认代码
Shape类
Shape是所有图形元素的基类,例如Line,Ellipse,Polygon,Rectange
Control类
Control派生自FrameworkElement,是所有用户交互元素的基类
Panel类
Panel派生自FrameworkElement,是所有面板的抽象基类,这个类的Children属性用于面板中的所有UI元素,定义了安排子控件的方法。派生自Panel的类为子控件的布置方式定了不同的类,例如WrapPanel,StackPanel,Canvas,Grid
ContentControl类
是所有有单个内容的控件的基类,如Label,Button。 内容控件的默认样式是受限制的,但可以使用模版改变其外观,ContentControl模型的类型具有一个Content属性.Content属性的类型为Object因此ContentControl中可以放置的内容没有任何限制
以下控件在使用ContentControl内容模型:
Button,ButtonBase,CheckBox,ComboBoxItem,ContentControl,Frame,GridViewColumHeader,GroupItem,Label,ListBoxItem,ListViewItem,NavigationWindow,RadioButton,RepeatButton,ScrollViewer,StatusBarItem, ToggleButton, ToolTip, UserControl, Window
Content中只能放置一个控件
HeaderedContentControl类
HeaderedContentControl类继承ContentControl类, 表示带有Header的ContentControl,其除了具有ContentControl的Content属性外,还具有一个Header属性
以下控件在使用HeaderedContentControl模型
Expander,GoupBox,TabItem
ItemsControl类
从ItemsControl继承的控件包含一个对象集合,可以使用ItemsSource属性或Items属性来填充一个ItemsControl.
以下控件在使用ItemsControl模型
ComboBox , ContextMenu, ListBox, ListView, Menu,StatusBar,TabControl,TreeView
HeaderedItemsControl类
HeaderedItemsControl从ItemsControl类继承. HeaderedItemsControl定义Header属性,该属性遵从相同的规则,因为HeaderedContentControl. WPF的Header属性附带三个从HeaderedItemControl继承的控件:
MenuItem,ToolBar,TreeViewItem