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的派生类。

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

  1. Unity核心对象模型

    总结的Unity引擎部分的核心对象模型类图,供大家学习时参考,根基类为Object,下一层包括核心基类GameObject,及其他作为资源的Mesh,Material,Shader,Texture,S ...

  2. UML类图详解和示例

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...

  3. Spring5源码解析系列一——IoC容器核心类图

    基本概念梳理 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现.我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象 ...

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

    面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...

  5. 八、面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)

    面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...

  6. UML类图解析

    上面是UML的语法. 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Associati ...

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

    一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...

  8. UML九种图-包图、类图

    UML九种图-包图.类图 一.包 (一)相关概念: 1.包: 一个包=一层=一个命名空间=一个文件夹 2.包的命名: 简单名:王老二 路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班 ...

  9. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

随机推荐

  1. prototype & __proto__

    [普通对象 vs 函数对象] js中对象分为两类,普通对象.函数对象.当在终端打印时,普通对象与函数对象有极其明显的差异. 一个不含杂七杂八的函数对象如下,这是第一种表现形式.: 若往里面塞东西,则会 ...

  2. oracle查询锁表

    select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = ...

  3. CNN、RNN、DNN

    一:神经网络 技术起源于上世纪五.六十年代,当时叫感知机(perceptron),包含有输入层.输出层和一个隐藏层.输入的特征向量通过隐藏层变换到达输出层,由输出层得到分类结果.但早期的单层感知机存在 ...

  4. Java中spring读取配置文件的几种方法

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...

  5. 配置Spring框架编写XML的提示

    1. 步骤一:先复制, http://www.springframework.org/schema/beans/spring-beans.xsd 2. 步骤二:搜索XML Catalog,点击Add按 ...

  6. .NET资源文件实现多语言切换

    1.创建对应的资源文件 lang.en.resx  英文 lang.resx   中文,默认 lang.zh-tw.resx  繁体 首先说明,这三个文件前面部分名称需要一样,只是 点 后面的语言代号 ...

  7. php调用C#写的dll包

    1.转到需要注册的dll路径下 2.输入regasm命令+文件名 3问题解决

  8. 【文件下载】Java下载文件的几种方式

    [文件下载]Java下载文件的几种方式  摘自:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServl ...

  9. 在mac console下 执行c++文件

    1 $ g++ -o NewFileName OldFileName.cpp -o is the letter O not zero NewFileName will be your executab ...

  10. DB2 create into的用法

    . 建立表 create table zjt_tables as (select * from tables) definition only; create table zjt_views as ( ...