UIElement.Measure(Size) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
汇报 UIElement 的 DesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。
public:
virtual void Measure(Size availableSize) = Measure;
void Measure(Size const& availableSize);
public void Measure(Size availableSize);
function measure(availableSize)
Public Sub Measure (availableSize As Size)
参数
- availableSize
- Size
父对象可以分配给子对象的可用空间。 子对象可以请求比可用空间更大的空间;如果在特定容器中可以进行滚动或其他重设大小行为,则可以适应提供的大小。
示例
此示例实现 MeasureOverride 以自定义自定义面板实现的“Measure”传递逻辑。 请特别注意代码的以下方面:
- 循环访问子级。
- 对于每个子级,调用 Measure,使用基于面板逻辑如何处理子级数量及其自己的已知大小限制有意义的 Size 。
- 在本例中,返回其大小 (,此简单面板返回固定大小,而不是在) 累计度量值时计算的大小。
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{
// Measure first 9 children giving them space up to 100x100, remaining children get 0x0
int i = 0;
foreach (FrameworkElement child in Children)
{
if (i < 9)
{
child.Measure(new Size(100, 100));
}
else
{
child.Measure(new Size(0, 0));
}
i++;
}
// return the size available to the whole panel, which is 300x300
return new Size(300, 300);
}
注解
Measure 调用可能会达到该特定类的 MeasureOverride 实现。 否则,大多数 FrameworkElement 类具有 Measure 的隐式默认布局行为。
availableSize 可以是从零到无限的任意数字。 参与布局的元素应返回给定 availableSize 所需的最小大小。
XAML UI 中初始布局定位的计算包括 Measure 调用和 Arrange 调用(按顺序排列)。 在 Measure 调用期间,布局系统使用 availableSize 度量来确定元素的大小要求。 在 Arrange 调用期间,布局系统将确定元素边界框的大小和位置。
首次生成布局时,它始终具有在 Arrange 之前发生的 Measure 调用。 但是,在第一次布局通过后,在它前面没有 Measure 的情况下, 可能会发生 Arrange 调用。 当仅影响 Arrange 的属性 (更改(例如对齐) )或父级收到不含 Measure 的 Arrange 时,可能会发生这种情况。
Measure 调用将自动使任何 Arrange 信息失效。 布局更新通常在布局系统) 确定的时间异步 (发生。 元素可能不会立即反映影响元素大小调整 (的属性更改,例如 Width) 。