UIElement.Arrange(Rect) 方法

定义

定位子元素,并确定 UIElement 的大小。 父元素从它们的 ArrangeCore(Rect) 实现(或者是 WPF 框架级别等效项)调用此方法,以便形成递归布局更新。 此方法产生第二次布局更新。

public:
 void Arrange(System::Windows::Rect finalRect);
public void Arrange (System.Windows.Rect finalRect);
member this.Arrange : System.Windows.Rect -> unit
Public Sub Arrange (finalRect As Rect)

参数

finalRect
Rect

父元素为子元素计算的最终大小,表示为 Rect 实例。

注解

对于 WPF 框架级元素派生方案, 的行为 Arrange 不应 (,也不能,除非隐藏) 更改。 相反,应替代 ArrangeOverride 类中的 实现。 作为 ArrangeOverride 默认 WPF 框架级别布局操作的一部分,由 在内部 Arrange 调用实现。 如果每个子元素具有子元素,则 ArrangeCore 实现还应在每个子元素上调用 ArrangeOverride

对于 WPF 核心级元素派生方案, 的行为 Arrange 不应 (,也不能,除非隐藏) 更改。 相反,应在类中重写 ArrangeCore 。 作为 ArrangeCore 默认 WPF 框架级别布局操作的一部分,由 在内部 Arrange 调用实现。 但是,这假定你使用的是 WPF 框架级布局及其布局系统,如果专门从 UIElement 基元素类派生 WPF 核心级别的元素,则通常不是这种情况。 如果每个子元素具有子元素,则 ArrangeCore 实现还应在每个子元素上调用 Arrange 。 请注意,WPF 核心级别方案意味着不使用 FrameworkElement 派生类,因为 FrameworkElement 密封 ArrangeCore

Windows Presentation Foundation (WPF) 中 WPF 框架级布局定位的Measure计算由调用和Arrange调用组成。 在 Measure 调用期间,布局系统使用提供的 Size () availableSize 参数确定元素的大小要求。 在 Arrange 调用期间,布局系统将确定元素边界框的大小和位置。 请参阅布局以了解详细信息。

availableSize 可以是从零到无穷大的任何数字。 要布局的元素通过 availableSize 参数返回所需的最小值Size

首次实例化布局时,它始终在 之前Arrange接收Measure调用。 但是,在第一次 Arrange 布局传递后,它可能会收到没有 的 Measure调用;当仅 Arrange 影响 的属性 (更改(例如对齐) )或父级收到 Arrange 没有 时 Measure,可能会发生这种情况。 调用 Measure 将自动使 Arrange 呼叫失效。

布局更新通常在布局系统) 确定的时间异步 (发生。 元素可能不会立即反映对影响元素大小调整 (的属性的更改,例如 Width) 。

注意

可以使用 方法强制 UpdateLayout 更新布局;但是,不建议调用此函数,因为这通常是不必要的,并且可能会导致性能不佳。 在许多情况下,调用 UpdateLayout 可能合适,布局系统可能已在处理更新。 布局系统能够以一种可以优化包中所有必要的更新的方式处理布局更改。

布局系统保留两个单独的无效布局队列,一个用于 Measure ,另一个用于 Arrange。 布局队列根据可视化树中元素的顺序进行排序。 树中较高位置的元素位于队列的顶部,以避免重复更改父项导致的冗余布局。 重复项会自动从队列中删除,如果元素已经有效,则会自动从队列中删除。

更新布局时, Measure 先清空队列,然后 Arrange 清空队列。 如果队列中有元素, Arrange 则永远不会排列队列中的 Measure 元素。

适用于