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 实现在内部由 Arrange 作为默认WPF框架级布局操作的一部分调用。 如果每个子元素具有子元素,则 ArrangeCore 实现还应调用 ArrangeOverride 它。

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

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

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

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

布局更新通常以异步方式进行(一次由布局系统确定)。 元素可能不会立即反映对影响元素大小调整的属性的更改(例如 Width)。

注释

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

布局系统保留两个单独的无效布局队列,一个用于 Measure 和一个用于 Arrange。 布局队列根据可视化树中的元素顺序进行排序。 树中较高元素位于队列顶部,以避免由父级重复更改导致的冗余布局。 重复条目会自动从队列中删除,并且元素在队列中已有效时会自动从队列中删除。

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

适用于