Visual \UIElemnt\FrameworkElement\Control

Visual

Visual 实际上是 WPF 组合系统的入口点。Visual 是托管 API 和非托管 milcore 这两个子系统之间的连接点。

Visual 对象可对下列功能提供支持:

  • 输出显示:呈现 Visual 对象的持久的序列化绘图内容。
  • 转换:对可视对象执行转换。
  • 剪辑:为 Visual 对象提供剪辑区域支持。
  • 命中测试:确定指定的坐标(点)或几何图形是否包含在可视对象的边界内。
  • 边界框计算:确定 Visual 对象的边框。UIElement

UIElement 定义核心子系统,包括 Layout、Input 和 Event。  

      Layout

Layout 是 WPF 中的一个核心概念。在许多系统中,可能有一组固定的布局模型(HTML 支持三种布局模型:流、绝对和表),也可能没有布局模型(User32 实际仅支持绝对定位)。WPF 先假设开发人员和设计人员希望有一个灵活的可扩展布局模型,该模型可能是由属性值而不是命令性逻辑驱动的。在 UIElement 级别,会引入布局的基本协定 - 具有 MeasureArrange 处理过程的两阶段模型。

     Input

Touch\Mouse\Stylus\KeyBoard

输入是作为内核模式设备驱动程序上的信号发出的,并通过涉及 Windows 内核和 User32 的复杂进程路由到正确的进程和线程。与输入相对应的 User32 消息路由到 WPF 后,就会转换为 WPF 原始输入消息,并发送到调度程序。WPF 允许将原始输入事件转换为多个实际事件,允许在保证传递到位的情况下在较低的系统级别实现类似“MouseEnter”的功能。

    Event

Preview 隧道路由事件 vs 冒泡事件

如果事件从目标向上遍历树直到根,则被称为“冒泡”,如果从根开始向下遍历到目标,它们被称为“隧道”。输入预览事件隧道,使树中的任何元素都有机会筛选事件或对事件采取操作。然后,常规(非预览)事件将从目标向上冒泡到根。

继承层次结构


System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Visual
System.Windows.UIElement
System.Windows.FrameworkElement

 

 FrameworkElement

a)         应用程序布局

FrameworkElement 引入的主要策略是关于应用程序布局。FrameworkElement 基于 UIElement 引入的基本布局构建而成,并增加了布局“插槽”的概念,使布局创作者可以更方便地拥有一组一致、属性驱动的布局语义。HorizontalAlignmentVerticalAlignmentMinWidthMargin 等属性使得从 FrameworkElement 派生的所有组件在布局容器内具有一致的行为。

b)         动画

c)         数据绑定 数据模板

d)         样式

Control

a)         常用属性

Control 提供一组常用属性,如 ForegroundBackgroundPadding 等,模板创作者可以使用这些常用属性来自定义控件的显示。控件的实现提供了数据模型和交互模型。交互模型定义了一组命令(如窗口的“关闭”),以及到输入笔势的绑定(如单击窗口上角的红叉)。数据模型提供了一组属性,用于自定义交互模型或自定义显示(由模板确定)。

b)         模型

数据模型(属性)、交互模型(命令和事件)及显示模型(模板)之间的划分,使用户可以对控件的外观和行为进行完全自定义。最常见的控件数据模型是内容模型。

原文地址:https://www.cnblogs.com/xiaokang088/p/2037528.html