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的派生类。
WPF核心对象模型-类图和解析的更多相关文章
- Unity核心对象模型
总结的Unity引擎部分的核心对象模型类图,供大家学习时参考,根基类为Object,下一层包括核心基类GameObject,及其他作为资源的Mesh,Material,Shader,Texture,S ...
- UML类图详解和示例
ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/UMLDescription UML类图概述 什么是UML ...
- Spring5源码解析系列一——IoC容器核心类图
基本概念梳理 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现.我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象 ...
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)
面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...
- 八、面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)
面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交 ...
- UML类图解析
上面是UML的语法. 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(Dependency)和关联(Associati ...
- WPF快速入门系列(2)——深入解析依赖属性
一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...
- UML九种图-包图、类图
UML九种图-包图.类图 一.包 (一)相关概念: 1.包: 一个包=一层=一个命名空间=一个文件夹 2.包的命名: 简单名:王老二 路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班 ...
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...
随机推荐
- 各种id生成策略
package com.taotao.utils; import java.util.Random; /** * 各种id生成策略 */ public class IDUtils { /** * 图片 ...
- Cause: org.xml.sax.SAXParseException; lineNumber: 45; columnNumber: 62; 元素内容必须由格式正确的字符数据或标记组成。
三月 09, 2018 12:13:39 下午 org.apache.catalina.core.StandardContext listenerStart严重: Exception sending ...
- 自己整理lnmp安装
1. 操作系统 CentOS release 6.5(final) 2. 安装mysql # yum install mysql-server #vi /etc/my.cnf +def ...
- Mo2C-tag
记者今天从中国科学院金属研究所获悉,该所沈阳材料科学国家(联合)实验室先进炭材料研究部任文才研究组在大尺寸高质量二维过渡族金属碳化物晶体的制备与物性研究方面取得了重要突破.相关成果日前在<自然— ...
- 360随身wifi隐藏ssid方法
360随身wifi隐藏ssid方法 以win7为例,介绍如何隐藏360随身wifi ssid方法 一. 禁止360随身wifi官方驱动自启动方法: 1. 找到360wifi自启动文件: 进入以下 ...
- nginx安装及基础配置(含jdk安装及配置)
0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...
- 【SQL模板】二.创建表视图模板TSQL
---Name: 创建表视图模板.sql ---Purpose: 用于创建 数据库中 新的数据表/视图 ---Author: xx ---Time: 2015-12-18 10:26:06 ---Re ...
- Judy Array - Example
“ In computer science and software engineering, a Judy array is a data structure that has high perfo ...
- Ubuntu下安装VirtualBox并为其添加USB支持
1.下载VirtualBox软件包和USB支持包 下载网址均为官方网站(可在此查看其使用教程):https://www.virtualbox.org/wiki/Downloads (若下载各平台各版本 ...
- JVM 系列(一)类加载
JVM 系列(一)类加载 类加载机制是指把 class 文件加载到内存,并对数据进行校验.解析和初始化,最终形成 JVM 可以直接使用的 Java 类型的过程. ClassLoader 加载一个 cl ...