UIElement.Arrange(Rect) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定位子元素并确定其 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)
参数
注解
对于WPF框架级元素派生方案,Arrange的行为不应(并且不能,除非隐藏)发生更改。 相反,应替代 ArrangeOverride 类中的实现。 ArrangeOverride 实现在内部由 Arrange 作为默认WPF框架级布局操作的一部分调用。 如果每个子元素具有子元素,则 ArrangeCore 实现还应调用 ArrangeOverride 它。
对于WPF核心级元素派生方案,Arrange的行为不应(且不能,除非阴影)发生更改。 相反,应在类中重写 ArrangeCore 。 ArrangeCore 实现在内部由 Arrange 作为默认WPF框架级布局操作的一部分调用。 但是,这假定你使用的是WPF框架级布局及其布局系统,这通常不是这样,如果你专门从 UIElement 基元素类派生WPF核心级别的元素, 则情况并非如此。 如果每个子元素具有子元素,则 ArrangeCore 实现还应调用 Arrange 它。 请注意,WPF核心级方案意味着你不使用 FrameworkElement 派生类,因为 FrameworkElement seals ArrangeCore。
Windows Presentation Foundation(WPF)中WPF框架级布局定位的计算包括Measure调用和Arrange调用。 在 Measure 调用期间,布局系统使用提供的 Size (availableSize) 参数确定元素的大小要求。 在 Arrange 调用期间,布局系统将完成元素边界框的大小和位置。 有关详细信息,请参阅 布局。
availableSize 可以是从零到无穷大的任何数字。 要布局的元素通过Size参数返回所需的最小值availableSize。
首次实例化布局时,它始终会收到之前Measure调用Arrange。 但是,在第一个布局传递后,它可能会收到 Arrange 没有 a Measure的调用;当影响仅 Arrange 更改的属性(如对齐方式)或父级收到 Arrange 没有 Measure对齐项时,可能会发生这种情况。 呼叫 Measure 将自动使 Arrange 呼叫失效。
布局更新通常以异步方式进行(一次由布局系统确定)。 元素可能不会立即反映对影响元素大小调整的属性的更改(例如 Width)。
注释
布局更新可以使用此方法强制 UpdateLayout 进行;但是,不建议调用此函数,因为它通常是不必要的,并且可能会导致性能不佳。 在许多情况下,调用 UpdateLayout 可能合适,布局系统可能已经在处理更新。 布局系统可以处理布局更改,以一种可以优化包中所有必要更新的方式。
布局系统保留两个单独的无效布局队列,一个用于 Measure 和一个用于 Arrange。 布局队列根据可视化树中的元素顺序进行排序。 树中较高元素位于队列顶部,以避免由父级重复更改导致的冗余布局。 重复条目会自动从队列中删除,并且元素在队列中已有效时会自动从队列中删除。
更新布局时,先 Measure 清空队列,后跟 Arrange 队列。 如果队列中有一个元素,则队列中的 Arrange 元素 Measure 永远不会排列。