FrameworkElement.LayoutUpdated 事件

定义

由于与布局相关的属性更改值或刷新布局的其他操作,可视化树的布局更改时发生。

// Register
event_token LayoutUpdated(EventHandler<IInspectable> const& handler) const;

// Revoke with event_token
void LayoutUpdated(event_token const* cookie) const;

// Revoke with event_revoker
FrameworkElement::LayoutUpdated_revoker LayoutUpdated(auto_revoke_t, EventHandler<IInspectable> const& handler) const;
public event System.EventHandler<object> LayoutUpdated;
function onLayoutUpdated(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("layoutupdated", onLayoutUpdated);
frameworkElement.removeEventListener("layoutupdated", onLayoutUpdated);
- or -
frameworkElement.onlayoutupdated = onLayoutUpdated;
Public Custom Event LayoutUpdated As EventHandler(Of Object) 
<frameworkElement LayoutUpdated="eventhandler"/>
 

事件类型

注解

LayoutUpdated 是在控件准备好交互之前 XAML 加载序列中发生的最后一个对象生存期事件。 但是,在对象生存期内,LayoutUpdated 也可能在运行时发生,原因有多种:属性更改、窗口大小调整或运行时布局请求 (UpdateLayout 或已更改的控件模板) 。 LayoutUpdated 事件在布局序列中的所有 SizeChanged 事件发生后触发。

当附加处理程序的对象不一定更改其下的可视化树中的任何内容时,可能会发生 LayoutUpdated。 例如,假设有两个子元素共享空间的布局容器。 如果第一个对象更改强制新布局的属性,则这两个对象都会触发 LayoutUpdated,因为即使其自己的附属布局不更改,第二个对象也可能被重新定位。

处理 LayoutUpdated 时,不要依赖于 发送方 值。 对于 LayoutUpdated, 发送方 始终为 null,而不管处理程序附加到何处。 这是为了防止处理程序向 发送方分配任何含义,例如暗示是该特定元素从可视化树中激发了事件。 LayoutUpdated 表示整个可视化树中的某些内容已更改,树中的任何位置的每个特定对象都可以选择处理此事件。 如果你熟悉较低级别的呈现 API 设计,则可以将触发 LayoutUpdated 等同于设置为对象驱动的保留模式呈现逻辑的一部分的“需要重绘”标志。

由于 LayoutUpdated 在许多情况下会触发,并且并不总是特定于实际更改的对象,因此请考虑处理 SizeChanged 事件是否更适合你的方案。

Windows 8 行为

Windows 8 在跟踪此事件的多个侦听器方面出现问题。 如果事件有多个侦听器/处理程序,则尝试删除其中一个侦听器/处理程序会导致删除所有这些侦听器/处理程序。 此问题从 Windows 8.1 开始得到更正;使用 -= 语法删除事件处理程序一次仅正确删除一个侦听器。 大多数代码不需要更改或行为检查,因为每个事件处理多个侦听器的情况并不常见。

对于针对 Windows 8 编译的应用,如果它在 Windows 8.1 上运行,将继续使用 Windows 8 行为。

适用于

另请参阅