UIElement.Measure 方法
2013/3/11
更新 UIElement 的 DesiredSize。一般地,实现其布局子级的自定义布局的对象从自己的 MeasureOverride 实现调用此方法以形成递归布局更新。
程序集: System.Windows(位于 System.Windows.dll 中)
参数
- availableSize
- 类型: System.Windows.Size
父对象可以为子对象分配的可用空间。子对象可以请求大于可用空间的空间;如果该特定容器中允许滚动或其他调整大小行为,则提供的大小可以适应此空间。
| 异常 | 条件 |
|---|---|
| InvalidOperationException | availableSize 包含 Double.NaN 值。请参见“备注”。 |
在执行自定义布局操作的重写方法的上下文之外无理由调用 Measure 或 Arrange。Windows Phone 布局基于在运行时检测与对象树和布局有关的属性更改,自主工作。有关更多信息,请参见 Windows Phone 的布局。
您将传递给 Measure 的 availableSize 不能有 Size 的 Height 或 Width 的 Double.NaN 值。availableSize 值可以为零到无限的任何值。参与布局的元素应返回它们对于给定 availableSize 所要求的最小 Size。
下面的示例实现了 MeasureOverride,以便为自定义面板实现来自定义度量处理过程逻辑。请特别注意代码的以下方面:
遍历子级。
对于每个子级,使用 Size(其意义基于面板逻辑处理子级数量及其自己的已知大小限制的方式)调用 Measure。
返回其大小(在此情况下,此简单面板返回固定大小而不是通过累计度量计算的大小)。
// 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); }