WPF核心对象模型-类图和解析

DispatcherObject是根基类,通过继承该类,可以得到访问创建该对象的UI线程的Dispatcher对象的能力。通过Dispatcher对象,可以将代码段合并入该UI线程执行。

DependencyObject是核心基类,用于实现依赖属性机制。依赖属性是一个比CLR属性更强大的属性模型,该模型支持更改通知,默认值继承等特性,并能减少属性存储空间。DependencyObject通过GetValue和SetValue等方法支持依赖属性机制。继承该类的几个下一层基类Visual,Visual3D,TriggerBase, Freezable及其派生类都获得了依赖属性机制的支持。

代表依赖属性的是DependencyProperty类,其中包含名称,所属类型,属性类型等属性,通过Register静态方法注册依赖属性,通过RegisterAttached静态方法注册附加属性。

直接继承根基类DispatcherObject的还有FrameworkTemplate和Style,FrameworkTemplate用于支持模板机制,Style用于支持样式机制。

继承FrameworkTemplate的包括数据模板DataTemplate,控件模板ControlTemplate,项面板模板ItemsPanelTemplate。定制数据呈现方式使用DataTemplate,可指定DataType用于统一定制某数据类型的呈现方式。HierarchicalDataTemplate继承DataTemplate,代表有层次结构的数据模板,可通过ItemsSource指定子级数据绑定的数据源,通过ItemTemplate指定子级数据的呈现方式。定制控件呈现方式使用ControlTemplate,可设置触发器。定制多项内容控件的条目布局方式使用ItemsPanelTemplate。

Style类用于样式抽取,样式和其他资源放在资源字典ResourceDictionary中。Style通过TargetType属性指定作用的类型,通过BasedOn属性指定基样式,通过在Setters中加入Setter设置属性对应的值,还可在Triggers中加入触发器。

ResourceDictionary可通过MergedDictionaries进行资源字典合并,通过Source指定引用的资源字典地址,通过索引器查找资源。

RoutedEvent类用于支持另一个重要机制路由事件,RoutedEvent的属性包含名称,所属类型,路由策略和处理器类型。通过EventManager的RegisterRoutedEvent静态方法注册路由事件。

DispatcherTimer是UI线程定时器,可设置间隔Interval,是否启用IsEnabled,通过Tick事件指定处理逻辑,通过Start和Stop方法开始和停止定时器。

Application代表应用程序,通过Current得到当前实例,MainWindow得到主窗口,可在Resources中添加应用程序级资源,通过StartupUri设置启动页面。

核心基类DependencyObject的直接派生类为Visual,Visual3D,TriggerBase和Freezable。

Visual代表2D可视元素, Visual3D代表3D可视元素,UIElement3D继承Visual3D代表3D UI元素,其又有两个派生类ModelUIElement3D和ContainerUIElement3D 。

TriggerBase用于支持触发器机制,其派生类包括Trigger,MultiTrigger,DataTrigger,MultiDataTrigger和EventTrigger。

Animatable是Freezable的派生类,其又有两个派生类Brush和ImageSource分别代表画刷和图片源。画刷包括纯色画刷SolidColorBrush,可设置颜色Color,渐变画刷GradientBrush,可设置渐变端点GradientStop,和瓷砖画刷TileBrush,可设置拉伸方式。GradientBrush又分为线性Linear和径向Radial两种。图片画刷ImageBrush是一种TileBrush,可设置图片源ImageSource。

ImageSource的派生类包括位图图片源BitmapSource,绘画图片源DrawingImage和3D图片源D3DImage,BitmapSource又有位图图片BitmapImage和可写位图图片WriteableBitmap两个派生类。

直接继承UIElement的是FrameworkElement,UIElement位于WPF核心层PresentationCore中,FrameworkElement及其派生类位于WPF框架层PresentationFramework中。UIElement提供了裁剪Clip,命令绑定CommandBindings,输入绑定InputBindings,是否可用IsEnabled,透明度Opacity,渲染变换RenderTransform,可见性Visibility等属性,通过RaiseEvent方法触发路由事件。FrameworkElement提供了鼠标光标Cursor,数据上下文DataContext,宽高,水平垂直对齐,外边距Margin,资源集合Resources,样式Style,Tag,工具提示ToolTip,触发器集合Triggers等属性,通过SetBinding方法设置绑定。

VisualStateManager,VisualStateGroup和VisualState用于实现可视状态管理机制。

控件Control, 文本块TextBlock,图片Image,页Page,装饰Decorator,面板Panel,弹出层Popup,形状Shape等直接继承FrameworkElement,它们都是框架元素。

TextBlock可设置文本Text和文本对齐方式TextAlignment。Image可设置源Source和拉伸方式Stretch。Page可设置内容Content和标题Title。Popup可设置子元素Child,是否打开IsOpen,位置Placement等属性。

Decorator是装饰元素的基类,可设置子元素Child,存在边框Border和查看框Viewbox两个派生类。Border可设置背景Background,边框画刷BorderBrush,边框宽度BorderThickness,圆角半径CornerRadius和内边距Padding。Viewbox可设置拉伸方式Stretch和拉伸方向StretchDirection。

Panel是布局容器的基类,可设置背景,可添加子元素。其派生类有网格布局Grid,可设置行列定义,堆积布局StackPanel,可设置方向,画布布局Canvas,停靠布局DockPanel,流式布局WrapPanel,可设置排列方向和项的宽高,统一网格布局UniformGrid,还有虚基类VirtualizingPanel。VirtualizingStackPanel是VirtualizingPanel的一种实现。

Shape是形状的基类,包含填充画刷Fill,线框画刷Stroke,线框宽度StrokeThickness,拉伸方式Stretch等属性。其派生类为矩形Rectangle,椭圆Ellipse,线Line和路径Path。

最后说一下Control极其派生类体系。Control包含背景Background,边框画刷BorderBrush,边框宽度BorderThickness,字体FontFamily,字号FontSize,字的粗细FontWeight,前景色Foreground,水平和垂直内容对其方式,内边距Padding和控件的模板Template。其派生类包括ContentControl和ItemsControl两个大族,分别代表有单项内容的控件和有多项内容的控件,以及TextBoxBase和RangeBase等小族。

RangeBase的派生类为ProgressBar和Slider。TextBoxBase的派生类为TextBox和RichTextBox。

ContentControl有单项内容,可设置内容Content,内容模板ContentTemplate,或内容模板选择器ContentTemplateSelector。 存在窗口Window,用户控件UserControl,工具提示ToolTip,滚动查看器ScrollViewer,框架Frame等派生类,以及有头部的单项内容控件HeaderedContentControl和基按钮ButtonBase两个重要的派生类。

HeaderedContentControl可设置头部Header,头部模板HeaderTemplate,或头部模板选择器HeaderTemplateSelector,派生类为展开器Expander,组容器GroupBox,标签页项TabItem等。

ButtonBase可设置点击模式ClickMode,命令Command,命令参数CommandParameter,派生类为按钮Button和切换按钮ToggleButton。ToggleButton可以设置是否选中IsChecked和是否为三态IsThreeState, 又有单选框RadioButton和复选框CheckBox两个派生类,其中RadioButton可设置组名GroupName。

ItemsControl有多项内容,可设置绑定数据源ItemsSource,项模板ItemTemplate,或项模板选择器ItemTemplateSelector,项面板ItemsPanel,项容器样式ItemContainerStyle,或项容器样式选择器ItemContainerStyleSelector等属性。存在有头部的多项内容控件HeaderedItemsControl和选择器Selector两个派生类。

HeaderedItemsControl可设置头部Header,头部模板HeaderTemplate,或头部模板选择器HeaderTemplateSelector,派生类为树视图项TreeViewItem等。

Selector可设置选择索引SelectedIndex或选择项SelectedItem,派生类为多选择器MultiSelector,下拉框ComboBox,列表框ListBox和标签页控件TabControl。DataGrid是MultiSelector的派生类。

时间: 2024-11-04 05:33:27

WPF核心对象模型-类图和解析的相关文章

WPF核心类图谱

?? 有空列出WPF核心类图谱,如下: ?

PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)

面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交流.这里主要介绍用例图,序列图和类图.   1.面向对象模型OOM 面向对象模型是利用UML的图形描述系统结构的模型,可以利用PowerDesigner的面向对象模型进行创建.PowerDesigner支持UML的下列图形. 用例图(User Case Diagram):通常用来定义系统的高层次草图

WPF快速入门系列(2)——深入解析依赖属性

一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最重要的知识点——依赖属性. 二.依赖属性的全面解析 听到依赖属性,自然联想到C#中属性的概念.C#中属性是抽象模型的核心部分,而依赖属性是专门基于WPF创建的.在WPF库实现中,依赖属性使用普通的C#属性进行了包装,使得我们可以通过和以前一样的方式来使用依赖属性,但我们必须明确,在WPF中我们大多数

[转载]UML类图总结

前言 类图和序列图是UML中最常用的两种Diagram.我将做详细的总结.在许多书中,或者网站中,在介绍一个系统的子系统的设计时,很多时候,都是给出简单的类图来简述构成子系统的类之间的关系.这足以说明类图的重要性. 对类图的基本认识有以下两点: 类图是以反映类的结构(属性.操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法: 类图中的类与面向对象语言中的类的概念是对应的,是对现实世界中的事物的抽象. 我们基于以上两点,来对类图进行更详细的学习. 类图中基本语法学习 在UM

uml系列(四)——类图

类图是uml的核心.学习类图,总共需要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的例子:猫.狗.猪三个都是动物.这里面的"动物"就是类,表示的是动物类. 在类图的表示中,类都包括一些什么呢?类图中的类都有以下部件: 1.名称,这是类的标识符,在同一个包内,类是不能重名的. 2.属性,比如说人类的属性就有:姓名.身高.年龄等等属性.在这里,有的属性可能不希望被每个人都知道,比如说年龄.所以又将属性的可见性分公有.私有.受保护和包内公有类

第一天:简单工厂模式与UML类图

何为简单工厂模式: 通过专门定义一个类,来负责创建其他类的实例,这些其它类通常具有共同的父类. 简单工厂模式的UML类图: 简单工厂模式中包含的角色和相应的职责如下: 工厂类Creator:简单工厂模式的核心,负责创建所有类的实例.该工厂类必须能够被客户端类调用,创建所需要的产品对象. 抽象产品类:简单工厂所创建的所有产品类的父类. 具体产品类:简单工厂所创建的具体实例对象,这些具体产品往往拥有共同的父类(抽象产品类). 计算器实例的c++代码实现:

设计模式之序章-UML类图那点事儿

设计模式之序-UML类图那点事儿 序 打14年年底就像写那么一个系列,用于讲设计模式的,代码基于JAVA语言,最早接触设计模式是大一还是大二来着,那时候网上有人给推荐书,其中就有设计模式,当时给我推荐的书我还隐约记得,叫GoF的,书名是<Design Patterns: Elements of Reusable Object-Oriented Software>,也即<设计模式>,机械出版社的将其翻译为<设计模式-可复用面向对象软件的基础>.至于为什么叫做GoF,那时候

UML类图和时序图

内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码对应起来: 有了这些知识,看后面章节的设计模式结构图就没有什么问题了: 本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patterns.EA

看懂UML类图和时序图

内容目录: 从一个示例开始 类之间的关系 时序图 附录:<图说设计模式> 看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码对应起来: 有了这些知识,看后面章节的设计模式结构图就没有什么问题了: 本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patterns.EA