UIElement 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
UIElement
是大多数具有视觉外观的 Windows 运行时 UI 对象的基类,并且可以在应用的用户界面中处理基本输入。
public ref class UIElement : DependencyObject, IAnimationObject, IVisualElement, IVisualElement2
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class UIElement : DependencyObject, IAnimationObject, IVisualElement, IVisualElement2
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class UIElement : DependencyObject, IAnimationObject, IVisualElement, IVisualElement2
Public Class UIElement
Inherits DependencyObject
Implements IAnimationObject, IVisualElement, IVisualElement2
- 继承
- 派生
- 属性
- 实现
注解
UIElement
是一个基元素:它是许多其他 Windows 运行时类继承的类,以支持 XAML UI 元素模型。
UIElement
定义的属性、方法和事件由数百个其他 Windows 运行时类继承。
UIElement
不公开公共构造函数。 通常,不会直接从 UIElement
或 FrameworkElement 派生类。 更常见的是派生自定义类的基类是以下类:
- 未密封的特定控件(例如,TextBox)
- 控制基类(Control、ContentControl、UserControl)
- 导航元素(页面、框架)
- 面板类(基类 Panel,或特定的非密封实现,如 网格)
UIElement
类用作 Windows 运行时 API 中许多属性和方法的类型参数。 例如,Border 的 Child 属性采用单个 UIElement
,表示绘制 边框 的元素。 可以为此类属性提供任何 UIElement
派生元素,包括定义的自定义控件。
UIElementCollection 类提供 UIElement
项的强类型集合。
UIElementCollection
用作包含多个子元素的对象属性的类型,例如任何 Panel 类的 Children 属性。
UIElement API 和功能
UIElement
扩展 DependencyObject,这是另一个基元素,并添加了对各种 Windows 运行时功能区域的支持。
用于响应用户交互的输入和事件
UI 中可见元素的大部分输入行为在 UIElement
类中定义。 这包括键盘、鼠标、触摸、拖放和焦点交互的事件。 有关详细信息,请参阅 处理指针输入、键盘交互,以及 自定义用户交互。
支持输入和用户交互的 UIElement
的突出 API:
- 指针事件:PointerPressed、PointerReleased、PointerMoved、PointerEntered、PointerExited
- 密钥处理事件:KeyDown、KeyUp
- 焦点:GotFocus、LostFocus
- 指针捕获:CapturePointer、PointerCanceled、PointerCaptureLost、ReleasePointerCapture、PointerCaptures
- 拖放:DragOver、拖放、DragEnter、DragLeave、AllowDrop
- 影响基本输入处理方式的 属性:IsHitTestVisible、AllowDrop
手势和操作
手势和操作也是处理输入和用户交互的一种方法。 API 在此处单独列出,因为这些事件表示系统如何与设备级输入操作交互,并将其解释为用户交互。 操作是处理动态多点交互的方法,例如收缩和拉伸。 手势和操作一起提供与 UWP 应用的触摸交互的触摸模式。 有关详细信息,请参阅 自定义用户交互 和 触摸交互设计。
支持手势和操作的 UIElement
的突出 API:
- 手势事件:DoubleTapped、持有、RightTapped、点击
- 操作事件:ManipulationCompleted、ManipulationDelta、ManipulationInertiaStarting、ManipulationStarted、ManipulationStarting
- 影响处理手势和操作方式的 属性:IsHoldingEnabled 和其他 Is*Enabled,ManipulationMode
基本外观
可见性 和 不透明度 属性通常用于调整 UI 中元素的外观,尤其是在样式、模板和视觉状态中。 剪辑、RenderTransform,以及 转换 属性对于生成交互和 UI 元素的不同外观都很有用。
基本布局
UIElement
类为布局特征提供了一个起点,其属性包括 DesiredSize、Arrange 和 Measure 方法。
FrameworkElement 增加了更多的布局功能。 有关详细信息,请参阅 使用 XAML 和 FrameworkElement定义布局。
路由事件
UIElement
的大多数输入事件 路由事件。 路由事件启用内置事件处理通知系统,以便在事件保持未处理的情况下,父对象可以处理对象树中子对象的输入事件。 此输入事件行为对于输入区域分组和控制组合非常有用。 有关详细信息,请参阅 事件和路由事件概述。
支持路由事件的 UIElement
的突出 API:AddHandler、RemoveHandler、*事件 属性。
其他平台支持
- OnCreateAutomationPeer 使类能够对其Microsoft UI 自动化支持使用自定义 AutomationPeer。
- RenderTransform、TransformToVisual、投影、CompositeMode、CacheMode 和 findSubElementsForTouchTargeting 对于高级 UI 布局方案非常有用。
UIElement 依赖项属性
UIElement
基元素类的许多读写属性都是依赖属性。 依赖属性支持使用 C++ 或 C# 的应用的一些基本编程模型功能,例如样式和模板、数据绑定、XAML 资源引用和属性更改逻辑。 有关依赖项属性及其支持的功能的详细信息,请参阅 依赖项属性概述。
UIElement 派生类
直接从 UIElement
派生的唯一 Windows 运行时类是 FrameworkElement。 有关派生自 FrameworkElement的类的列表,请参阅 FrameworkElement 参考主题的“FrameworkElement 派生类”部分。
属性
方法
事件
AccessKeyDisplayDismissed |
在不再显示访问密钥时发生。 |
AccessKeyDisplayRequested |
当用户请求显示访问密钥时发生。 |
AccessKeyInvoked |
当用户完成访问密钥序列时发生。 |
BringIntoViewRequested |
当对此元素或其子代之一调用 StartBringIntoView 时发生。 |
CharacterReceived |
当输入队列接收单个组合字符时发生。 |
ContextCanceled |
当上下文输入手势继续进入操作手势时发生,以通知元素不应打开上下文浮出控件。 |
ContextRequested |
当用户完成上下文输入手势(例如右键单击)时发生。 |
DoubleTapped |
在此元素的命中测试区域发生其他未经处理的 DoubleTap 交互时发生。 |
DragEnter |
当输入系统报告具有此元素作为目标的基础拖动事件时发生。 |
DragLeave |
当输入系统报告具有此元素作为源的基础拖动事件时发生。 |
DragOver |
当输入系统将具有此元素的基础拖动事件报告为潜在放置目标时发生。 |
DragStarting |
在启动拖动操作时发生。 |
Drop |
当输入系统将此元素作为放置目标报告基础删除事件时发生。 |
DropCompleted |
在结束源时使用此元素执行拖放操作时发生。 |
GettingFocus |
在 UIElement 接收焦点之前发生。 此事件是同步引发的,以确保事件在冒泡时不会移动焦点。 |
GotFocus |
当 UIElement 接收焦点时发生。 此事件是异步引发的,因此焦点可以在浮泡完成之前再次移动。 |
Holding |
在此元素的命中测试区域发生其他未经处理的 保留 交互时发生。 |
KeyDown |
当 UIElement 具有焦点时按下键盘键时发生。 |
KeyUp |
当 UIElement 具有焦点时释放键盘键时发生。 |
LosingFocus |
在 UIElement 失去焦点之前发生。 此事件是同步引发的,以确保事件在冒泡时不会移动焦点。 |
LostFocus |
当 UIElement 失去焦点时发生。 此事件是异步引发的,因此焦点可以在浮泡完成之前再次移动。 |
ManipulationCompleted |
当 UIElement 上的操作完成时发生。 |
ManipulationDelta |
在操作过程中输入设备更改位置时发生。 |
ManipulationInertiaStarting |
当输入设备在操作和惯性开始时失去与 UIElement 对象的接触时发生。 |
ManipulationStarted |
当输入设备开始对 UIElement进行操作时发生。 |
ManipulationStarting |
首次创建操作处理器时发生。 |
NoFocusCandidateFound |
当用户尝试移动焦点(通过制表符或方向箭头)时发生,但焦点不会移动,因为没有在移动方向找到候选焦点。 |
PointerCanceled |
当使联系人异常失去联系人的指针时发生。 |
PointerCaptureLost |
当此元素以前持有的指针捕获移动到另一个元素或其他地方时发生。 |
PointerEntered |
当指针进入此元素的命中测试区域时发生。 |
PointerExited |
当指针离开此元素的命中测试区域时发生。 |
PointerMoved |
当指针在指针保留在此元素的命中测试区域中时发生。 |
PointerPressed |
当指针设备启动此元素中的 按 操作时发生。 |
PointerReleased |
在此元素中释放之前启动 按 操作的指针设备时发生。 请注意,新闻 操作的结束不能保证触发 |
PointerWheelChanged |
当指针滚轮的增量值更改时发生。 |
PreviewKeyDown |
当 UIElement 具有焦点时按下键盘键时发生。 |
PreviewKeyUp |
当 UIElement 具有焦点时释放键盘键时发生。 |
ProcessKeyboardAccelerators |
按下 键盘快捷方式(或快捷键) 时发生。 |
RightTapped |
当指针位于元素上时发生右键输入刺激时发生。 |
Tapped |
在其他未经处理的 点击 交互发生在此元素的命中测试区域时发生。 |