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 ...
随机推荐
- spring学习笔记(三)
spring jdbc spring tx 1.spring的jdbc模板 Spring提供了很多持久层技术的模板类简化编程: 1.1.jdbc模板的基本使用 @Test // JDBC模板的基本使用 ...
- 运行Maven项目时出现invalid LOC header (bad signature)
为Maven小白,今天这问题困扰了我好久,经过多次在网上查询,终于找到了原因.明明一个小问题却耗费很多时间,着实不应该,所以必须记录一下. 报错信息如下: 对话框: 控制台: <span s ...
- [leetcode]112. Path Sum路径和(是否有路径)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- redis中multi和pipeline区别以及效率(推荐使用pipeline)
手册得知 pipeline 只是把多个redis指令一起发出去,redis并没有保证这些指定的执行是原子的:multi相当于一个redis的transaction的,保证整个操作的原子性,避免由于中途 ...
- JAVA list集合两种去重方法
结果: 转载地址:http://geek.csdn.net/news/detail/127940
- 3D文件压缩库——Draco简析
3D文件压缩库——Draco简析 今年1月份时,google发布了名为“Draco”的3D图形开源压缩库,下载了其代码来看了下,感觉虽然暂时用不到,但还是有前途的,故简单做下分析. 注:Draco 代 ...
- Linux ldconfig命令
一.简介 ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig. ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/u ...
- [SoapUI] 在Jenkins上传递project级别的参数给case
- 模型参数_grid
from sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.preproc ...
- 情感分析snownlp包部分核心代码理解
snownlps是用Python写的个中文情感分析的包,自带了中文正负情感的训练集,主要是评论的语料库.使用的是朴素贝叶斯原理来训练和预测数据.主要看了一下这个包的几个主要的核心代码,看的过程作了一些 ...