FrameworkElement.MeasureOverride(Size) 方法

定義

提供配置週期的「量值」傳遞行為。 類別可以覆寫這個方法,以定義自己的「量值」傳遞行為。

protected:
 virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) As Size

參數

availableSize
Size

這個物件可以提供給子物件的可用大小。 Infinity 可以指定為值,以指出物件的大小會調整為任何可用的內容。

傳回

此物件在版面配置期間決定其需求的大小,根據子物件的配置大小計算,或根據固定容器大小等其他考慮而定。

範例

此範例會實作 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

備註

這個方法的預設實作會針對大部分 FrameworkElement 衍生類別執行內建配置。 MeasureOverride 會提供 Measure的行為,每當由內部配置邏輯或您自己的應用程式程式碼呼叫 Measure 時,包括您自己針對其他類別使用的任何 MeasureOverride 方法。 如果您要產生樣板化控制項,MeasureOverride 邏輯會定義控制項的特定「量值」傳遞配置邏輯。

當您的應用程式執行時,元素如何經歷版面配置程式的一般設計分成兩個步驟:「量值」階段,然後是「排列」傳遞。 控制作者 (或面板作者) 想要自訂版面配置處理的「量值」傳遞,應該覆寫 MeasureOverride。 您的實作應該執行下列動作:

  • 逐一查看屬於配置一部分之子物件的特定子物件集合,並在每個子物件上呼叫 Measure
  • 在呼叫Measure) 之後,就會在每個子 (立即取得DesiredSize
  • 根據子物件所需的大小執行度量,計算父系所需的淨大小。 MeasureOverride 的傳回值應該是物件本身所需的大小,然後成為目前物件的父系的 Measure 輸入。 這個相同的程式會繼續執行版面配置系統,直到到達頁面/物件樹狀結構的根目錄為止。 在這個程式中,子物件可能會傳回比初始availableSize更大的DesiredSize大小,以指出子物件想要更多空間。 這可能會在您自己的實作中處理,方法是引進可捲動的區域、調整父控制項大小、建立某種方式的堆疊順序,或測量或排列可能會因版面配置容器用途而有所不同之內容的任意數目解決方案。

適用於

另請參閱