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. Bioconductor应用领域之基因芯片

    引用自https://mp.weixin.qq.com/s?__biz=MzU4NjU4ODQ2MQ==&mid=2247484662&idx=1&sn=194668553f9 ...

  2. Android Studio 连接天天、海马、逍遥模拟器

    adb connect 127.0.0.1:6555 取消连接 adb disconnect 127.0.0.1:6555 连接海马模拟器(未测试)  adb connect 127.0.0.1:26 ...

  3. Unity3d dll 热更新 基础框架

    APK包装到用户手机上后,代码如何更新,总不能全用LUA吧?特别是代码非常多的战斗手游 昨晚上有了dll 热更新的想法,今天做了一天的实验,也遇到些坑,这里总结下 工作环境: U3D5.3.2 + v ...

  4. [leetcode]523. Continuous Subarray Sum连续子数组和(为K的倍数)

    Given a list of non-negative numbers and a target integer k, write a function to check if the array ...

  5. 坑爹的HP

    昨天晚上帮人远程修理电脑,情况是这样的: HP CQ45笔记本, 比较老的机器, win32 xp sp3 系统, 突然发现没有声音了,而且右下角也没有出现小喇叭图标. 处理过程: 1.先查看了控制面 ...

  6. requestFullscreen()事件全屏不好使怎么解决

    标明:我在360和火狐中全屏requestFullscreen()事件不好使: 解释:我后来发现我的页面是在iframe框架中使用的并且没有设置allowfullscreen="true&q ...

  7. 白盒静态自动化测试工具:FindBugs使用指南

    目 录     1     FINDBUGS介绍     2     在ECLIPSE中安装FINDBUGS插件     3     在ECLIPSE中使用FINDBUGS操作步骤     3.1   ...

  8. CString 作为参数执行都不执行

    static int LoadUsbSDK(CString curpath ) win10系统下 CString 函数加载dll直接跳过 加载dll最好不要带参数

  9. 获得iframe 高度 ,各种浏览器

    function fuFunctiondan(){ var frm=$("#z_div"); var iframeHeight=0; if (navigator.userAgent ...

  10. HTML5 APP应用实现图片上传及拍照上传功能

    https://blog.csdn.net/zmzwll1314/article/details/46965663 http://www.cnblogs.com/leo0705/ https://zh ...