UIElement.MeasureCore(Size) 方法

定義

任一項目在衍生類別中被覆寫時,會提供可以正確調整該項目的度量邏輯,並且也會同時考慮所有子項目內容的大小。

C#
protected virtual System.Windows.Size MeasureCore(System.Windows.Size availableSize);

參數

availableSize
Size

父項目可以配置給子項目使用的大小。

傳回

這個項目在配置中需要的大小。

範例

的一般覆寫 MeasureCore 會遵循這個近似模式, (沒有稱為 VisualChildren 的內建集合; VisualChildren 是一個預留位置,代表專案維護的任何子集合) 。

C#
protected override Size MeasureCore(Size availableSize)
{
    foreach (UIElement child in VisualChildren)
    {
        child.Measure(availableSize);
        // call some method on child that adjusts child size if needed
        _cache.StoreInfoAboutChild(child);
    }
    Size desired = CalculateBasedOnCache(_cache);
    return desired;
}
  • 您必須在每個子專案上呼叫 Measure

  • 一般而言,您的實作應該快取相同元素中 和 ArrangeCore 方法呼叫之間的 MeasureCore 度量資訊。

  • 不需要呼叫 的 MeasureCore 基底實作,但如果基底實作提供所需的版面配置功能,則可能適用。

  • Measure根據父元素所支援的版面配置類型,對 子項目的呼叫應該傳遞與父元素相同的 availableSize 或區域的子集。 例如,移除元素特定框線或邊框間距、捲軸或自訂控制項的區域是有效的。

備註

從 衍生專案,而不是 UIElement 衍生專案 FrameworkElement 比較常見。 如果您衍生自 FrameworkElement ,請注意 方法上的 FrameworkElementMeasureCoreMeasureCore 寫。 因此,如果您透過不包含 FrameworkElement 的繼承衍生自 UIElement ,則只會以改變版面配置量值特性的方法覆寫 MeasureCore 。 如果您嘗試在 WPF 核心層級上建置自己的實作,這可能是這種情況。 否則,如果您要衍生自 FrameworkElement ,則 Measure 行為的實作範本是 FrameworkElement 的實作 MeasureOverride

具有子項目的父元素必須在每個子系上呼叫 Measure ,否則這些子項目不會調整或排列大小,而且實際上會從版面配置中消失。

給繼承者的注意事項

實作必須能夠處理為 availableSize 無限提供的值。 無限值表示沒有要求的條件約束,而且會透過遞迴 Measure 呼叫,有效地將度量選擇延遲至父元素。

實作可以將 提供給 availableSize 的值視為軟式條件約束。 即使應用程式程式碼的其他層面能夠判斷父元素目前的實際大小,子項目也可能指定較大的大小。 大型要求是一種慣例,指出子項目正在查詢您的父元素是否可支援內容顯示區域內的內容捲動。

適用於

產品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10