WPF 开发教程之UIElement、FrameworkElement和ContentElement
在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相关推荐
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...
- iOS 9应用开发教程之ios9中实现按钮的响应
iOS 9应用开发教程之ios9中实现按钮的响应 IOS9实现按钮的响应 按钮主要是实现用户交互的,即实现响应.按钮实现响应的方式可以根据添加按钮的不同分为两种:一种是编辑界面添加按钮实现的响应:另一 ...
- iOS 9应用开发教程之ios9的视图
iOS 9应用开发教程之ios9的视图 了解IOS9的视图 在iPhone或者iPad中,用户看到的和摸到的都是视图.视图是用户界面的重要组成元素.本节将主要讲解ios9视图的添加.删除以及位置和大小 ...
- iOS 9应用开发教程之iOS 9新特性
iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...
- Xamarin Anroid开发教程之Anroid开发工具及应用介绍
Xamarin Anroid开发教程之Anroid开发工具及应用介绍 Xamarin开发Anroid应用介绍 如今智能手机已经盛行了好几年,而针对这些智能手机的软件开发也变得异常火热.但是在Andro ...
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...
- HealthKit开发教程之HealthKit的复合数据
HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...
- HealthKit开发教程之HealthKit的辅助数据
HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...
- Unity 2D游戏开发教程之2D游戏的运行效果
Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...
最新文章
- python 常用内置函数_Python小白必备的8个最常用的内置函数(推荐)
- Linux time ls命令:用户态内核态分别占用多长时间
- MySQL中count(*)用法
- CloudEngine 6800 堆叠场景下配置eth-trunk链路聚合流量负载不均衡
- [闲谈]程序猿一天的日程安排
- Unable to run Kiwi tests on iOS8 device
- 【渝粤教育】广东开放大学 金融机构与金融市场 形成性考核 (57)
- 使用简单的缓存提高程序执行速度
- 适合自己的才是最好的
- 金格公司对致远HandWrite产品的测试地址
- 来了!Python 官方发布整套中文PDF文档(共27本)
- ADSL防御黑客进攻的方法
- 软件开发基本流程【一】
- 软考网络工程师好考吗?怎么备考?
- CUDA 编程学习
- 最简单DIY基于STM32单片机的蓝牙智能小车设计方案
- cherry键盘G80-3000s无法使用组合快捷键
- Android Launcher启动应用程序流程源码解析
- 设计模式之模板方法模式在kafka DelayedOperation中的应用
- Smart forms
热门文章
- 安装 Visual Studio[文章第二部分为Visual Studio2010详解安装教程(附下载链接)]
- 《三叶虫与其他故事》我的恐惧如涟漪扩散,荡漾过百万年的时光
- gradle编译 Errors occurred while build effective model错误
- 创世神曲java下载_创世神曲-魔姬传说
- java web系统毕业论文_毕业论文--基于JavaWeb的网络购物中心系统的实现.doc
- 11 wifi 驱动 进阶 http://blog.csdn.net/wh_19910525/article/details/7393615
- Win10-21H1自动安装IP1180打印机失败的解决办法
- 音乐主页html5模板,Music音乐演唱网站模板
- TestDirector其他
- 金山打字通2011+免升级