在WPF常用控件的基类是FrameworkElement,FrameworkContentElement,这两个控件类又是从UIElement和ContentElement派生出来的。

UIElement是 WPF 核心级实现的基类,这些实现是在 WPF元素和基本表示特性上生成的。

UIElement 提供元素布局特征的起点,还公开派生类可以重写的虚拟方法,这可能会影响元素及其子元素的布局呈现行为。

通常,类中还定义了元素的大部分输入和焦点行为 UIElement。 这包括键盘、鼠标和触笔输入的事件以及相关的状态属性。 其中的许多事件都是路由事件,许多输入相关事件都具有冒泡路由版本以及事件的隧道版本。 这些配对事件通常是控制作者最感兴趣的事件。

UIElement还包括与 WPF 事件模型相关的 Api,包括可以引发源自元素实例的指定路由事件的方法。

就体系结构而言, UIElement可以考虑大致等效于 Win32 编程中的窗口句柄,或动态 HTML (DHTML) 编程中的元素。

提供很多鼠标移动,键盘输入依赖属性,还提供元素基础事件定义。比如常用的:IsEnabled,Focusable,IsMouseOver,Opacity等都是从此类定义的。

FrameworkElement为为 WPF元素提供框架级别的一组属性、事件和方法。此类表示提供的 WPF 框架级实现,该实现基于UIElement定义的 WPF 核心级 API 构建。

继承关系是:DependencyObject->Visual->UIElement->FrameworkElement

FrameworkElement 扩展 UIElement 并添加了以下功能:

布局系统定义: FrameworkElement 针对在中定义为虚拟成员的某些方法提供特定的 WPF 框架级实现 UIElement 。 最值得注意的是, FrameworkElement 密封某些 wpf 核心级别的布局替代,并提供 wpf 框架级别等效项,派生类应改为重写。 例如, FrameworkElement 密封 ArrangeCore 但提供 ArrangeOverride 。 这些更改反映了这样一个事实:在 WPF 框架级别,有一个完全布局系统可呈现任何 FrameworkElement 派生类。 在 WPF 核心级别,将构建基于 WPF 的常规布局解决方案的某些成员是就地的,但布局系统的实际引擎并未定义。 请参阅布局以了解详细信息。

逻辑树: 一般 WPF 编程模型通常以元素树的形式表示。 支持以逻辑树形式表示元素树,并支持在标记中定义该树 FrameworkElement 。 但请注意, FrameworkElement 有意不要定义内容模型,而是将此责任留给派生类。 有关详细信息,请参见 WPF 中的树。

对象生存期事件: 当) 调用构造函数时,或者当元素首次加载到逻辑树中时,知道 (构造函数时,这通常很有用。 FrameworkElement 定义多个与对象生存期相关的事件,这些事件为涉及元素(如添加更多子元素)的代码隐藏操作提供有用的挂钩。 有关详细信息,请参阅 对象生存期事件。

数据绑定和动态资源引用支持: 数据绑定和资源的属性级别支持由 DependencyProperty 类实现并在属性系统中使用,但是,可以解析存储为 Expression (编程构造的成员值,该构造是为数据绑定和动态资源提供基础的,) 由实现 FrameworkElement 。 有关详细信息,请参阅 数据绑定概述 和 XAML 资源。

样式: FrameworkElement 定义 Style 属性。 但是,尚未 FrameworkElement 定义对模板的支持,或不支持修饰器。 这些功能由控件类(如和) Control 引入 ContentControl 。

更多动画支持: 某些动画支持已在 WPF 核心级别定义,但 FrameworkElement 通过实现和相关成员扩展了此支持 BeginStoryboard 。

常用的属性:ActualHeight,DataContext,Loaded,Margin,Margin,Name等。

ContentElement 为内容元素提供 WPF 核心级基类。内容元素设计用于流样式显示,它们使用面向标记的直观布局模型和精心设计的简单对象模型。

ContentElement 定义以下常见内容特征:

输入:所有 ContentElement 派生类都为键盘、鼠标、拖放操作、触笔控件和快捷键提供基本的输入捕获支持。

重点:所有 ContentElement 派生类都有可能获得焦点。 (但基类的默认可设定焦点状态 ContentElement 为 false 。 若要详细了解如何创建可 ContentElement 设定焦点的,请参阅 Focusable

事件: ContentElement 包括与输入和焦点相关的事件; 它还包括状态更改的事件。 在许多情况下, ContentElement 事件是路由事件。 在某些情况下,路由事件同时具有隧道和冒泡路由策略,作为响应相同状态或条件的单独事件而引发。 此外,还 ContentElement 定义了可引发路由事件并且可以添加或删除事件处理程序的 api。

ContentElement 与共享许多常见 Api UIElement 。 这些公共 Api 不来自共享类继承。 但在每个类中,它们共享公共命名、类似行为和相似的 Api 内部实现。 相似性是因为 ContentElement 和 UIElement 都是元素基的每个类,但对于其标记对象模型行为,每个类都有不同的意图。

具体而言, UIElement 从开始 Visual ,后者为在复合窗口内的矩形区域提供更低级别的图形支持 ContentElement ,而 ContentElement 延迟呈现,以便更轻松地支持更常见的文档方案(如 flow 和包装)。 这两个相关的类还实现了公共接口 IInputElement 和 IAnimatable 。

对继承者的说明

ContentElement类尚未定义流样式演示的完整内容元素的所有方面。 FrameworkContentElement 是的直接派生类 ContentElement 。 FrameworkContentElement 包括一组更完整的附加成员,它们支持 FrameworkContentElement 在内容宿主内呈现,并使用 WPF 框架级别布局系统。

推荐一款WPF MVVM框架开源项目:Newbeecoder.UI

Newbeecoder.UI开源项目

Demo下载:

Newbeecoder.UIhttps://download.csdn.net/download/liaohaiyin/63234875​​​​​​​

WPF 开发教程之UIElement、FrameworkElement和ContentElement相关推荐

  1. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  2. iOS 9应用开发教程之ios9中实现按钮的响应

    iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...

  3. iOS 9应用开发教程之ios9的视图

    iOS 9应用开发教程之ios9的视图 了解IOS9的视图 在iPhone或者iPad中,用户看到的和摸到的都是视图.视图是用户界面的重要组成元素.本节将主要讲解ios9视图的添加.删除以及位置和大小 ...

  4. iOS 9应用开发教程之iOS 9新特性

    iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...

  5. Xamarin Anroid开发教程之Anroid开发工具及应用介绍

    Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Andro ...

  6. AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码

    AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...

  7. HealthKit开发教程之HealthKit的复合数据

    HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...

  8. HealthKit开发教程之HealthKit的辅助数据

    HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...

  9. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

最新文章

  1. python 常用内置函数_Python小白必备的8个最常用的内置函数(推荐)
  2. Linux time ls命令:用户态内核态分别占用多长时间
  3. MySQL中count(*)用法
  4. CloudEngine 6800 堆叠场景下配置eth-trunk链路聚合流量负载不均衡
  5. [闲谈]程序猿一天的日程安排
  6. Unable to run Kiwi tests on iOS8 device
  7. 【渝粤教育】广东开放大学 金融机构与金融市场 形成性考核 (57)
  8. 使用简单的缓存提高程序执行速度
  9. 适合自己的才是最好的
  10. 金格公司对致远HandWrite产品的测试地址
  11. 来了!Python 官方发布整套中文PDF文档(共27本)
  12. ADSL防御黑客进攻的方法
  13. 软件开发基本流程【一】
  14. 软考网络工程师好考吗?怎么备考?
  15. CUDA 编程学习
  16. 最简单DIY基于STM32单片机的蓝牙智能小车设计方案
  17. cherry键盘G80-3000s无法使用组合快捷键
  18. Android Launcher启动应用程序流程源码解析
  19. 设计模式之模板方法模式在kafka DelayedOperation中的应用
  20. Smart forms

热门文章

  1. 安装 Visual Studio[文章第二部分为Visual Studio2010详解安装教程(附下载链接)]
  2. 《三叶虫与其他故事》我的恐惧如涟漪扩散,荡漾过百万年的时光
  3. gradle编译 Errors occurred while build effective model错误
  4. 创世神曲java下载_创世神曲-魔姬传说
  5. java web系统毕业论文_毕业论文--基于JavaWeb的网络购物中心系统的实现.doc
  6. 11 wifi 驱动 进阶 http://blog.csdn.net/wh_19910525/article/details/7393615
  7. Win10-21H1自动安装IP1180打印机失败的解决办法
  8. 音乐主页html5模板,Music音乐演唱网站模板
  9. TestDirector其他
  10. 金山打字通2011+免升级