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,使用 大小,根據 面板邏輯如何處理子係數目及其本身的已知大小限制。
- 在此案例中傳回其大小 (,這個簡單面板會傳回固定大小,而不是計算在累積度量) 時計算的大小。
// 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);
}
'First measure all children and return available size of panel
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
'Measure first 9 children giving them space up to 100x100, remaining children get 0x0
Dim i As Integer = 0
For Each child As FrameworkElement In Children
If i < 9 Then
child.Measure(New Size(100, 100))
Else
child.Measure(New Size(0, 0))
End If
i += 1
Next
'return the size available to the whole panel, which is 300x300
Return New Size(300, 300)
End Function
備註
Measure 呼叫可能會達到該特定類別的 MeasureOverride 實作。 否則,大部分 的 FrameworkElement 類別都有 Measure 的隱含預設配置行為。
availableSize 可以是從零到無限的任何數位。 參與配置的專案應該會傳回給定availableSize所需的最小Size。
在 XAML UI 中計算初始版面配置位置是由 Measure 呼叫和 Arrange 呼叫所組成,依該順序。 在 Measure 呼叫期間,配置系統會使用 availableSize 度量來決定元素的大小需求。 在 Arrange 呼叫期間,配置系統會完成元素周框方塊的大小和位置。
第一次產生版面配置時,它一律會有 在 Arrange之前發生的 Measure 呼叫。 不過,在第一個版面設定階段之後,就可能會發生 Arrange 呼叫,而不需在它前面有 Measure。 當影響 Arrange 的屬性變更 (例如對齊) ,或父系收到沒有 Measure 的 Arrange 時,就會發生這種情況。
量值呼叫會自動使任何 Arrange 資訊失效。 版面配置更新通常會以非同步方式 (,一次由版面配置系統) 決定。 元素可能不會立即反映影響元素調整大小的屬性變更 (,例如 Width) 。