Freigeben über


FrameworkElement.MeasureOverride(Size) Methode

Definition

Stellt das Verhalten für den Durchlauf "Measure" des Layoutzyklus bereit. Klassen können diese Methode überschreiben, um ihr eigenes Measure-Passverhalten zu definieren.

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

Parameter

availableSize
Size

Die verfügbare Größe, die dieses Objekt untergeordneten Objekten geben kann. Unendlich kann als Wert angegeben werden, um anzugeben, dass das Objekt auf den verfügbaren Inhalt größe.

Gibt zurück

Die Größe, die dieses Objekt während des Layouts benötigt, basierend auf seinen Berechnungen der zugewiesenen Größen für untergeordnete Objekte oder auf anderen Überlegungen wie einer festen Containergröße.

Beispiele

In diesem Beispiel wird MeasureOverride implementiert, um die Passlogik "Measure" für eine benutzerdefinierte Panelimplementierung anzupassen. Beachten Sie insbesondere die folgenden Aspekte des Codes:

  • Iteriert kinder.
  • Ruft für jedes untergeordnete Element Measure auf, wobei eine Größe verwendet wird, die basierend darauf sinnvoll ist, wie die Panellogik die Anzahl der untergeordneten Elemente und ihr eigenes bekanntes Größenlimit behandelt.
  • Gibt seine Größe zurück (in diesem Fall gibt dieser einfache Bereich eine feste Größe und nicht eine Größe zurück, die beim Akkumulieren der Messungen berechnet wird).
// 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

Hinweise

Diese Methode verfügt über eine Standardimplementierung, die ein integriertes Layout für die meisten von FrameworkElement abgeleiteten Klassen ausführt. MeasureOverride stellt das Verhalten für Measure bereit, wenn Measure entweder von der internen Layoutlogik oder dem Code Ihrer eigenen App aufgerufen wird, einschließlich aller MeasureOverride-Methoden für andere Klassen. Wenn Sie ein vorlagenbasiertes Steuerelement erstellen, definiert die MeasureOverride-Logik die spezifische Passlayoutlogik "Measure" Ihres Steuerelements.

Der allgemeine Entwurf, wie Elemente einen Layoutprozess durchlaufen, wenn Ihre App ausgeführt wird, gliedert sich in zwei Schritte: einen "Measure"-Durchlauf und dann einen Durchgang "Anordnen". Steuerelementautoren (oder Panelautoren), die den Pass "Measure" der Layoutverarbeitung anpassen möchten, sollten MeasureOverride überschreiben. Ihre Implementierung sollte die folgenden Schritte ausführen:

  • Iterieren Sie die bestimmte Auflistung untergeordneter Objekte Ihrer Klasse, die Teil des Layouts sind, und rufen Sie Measure für jedes untergeordnete Objekt auf.
  • Rufen Sie Sofort DesiredSize für jedes untergeordnete Element ab (dies wird als Eigenschaft festgelegt, nachdem Measure aufgerufen wurde).
  • Berechnen Sie die gewünschte Nettogröße des übergeordneten Objekts basierend auf der ausgeführten Messung der Größe, die für untergeordnete Objekte erforderlich ist. Der Rückgabewert von MeasureOverride sollte die eigene gewünschte Größe des Objekts sein, die dann zur Measure-Eingabe für das übergeordnete Element des aktuellen Objekts wird. Dieser Prozess wird über das Layoutsystem fortgesetzt, bis der Stamm der Seiten-/Objektstruktur erreicht ist. Während dieses Prozesses geben untergeordnete Objekte möglicherweise eine größere DesiredSize-Größe als die anfängliche verfügbareSize zurück, um anzugeben, dass das untergeordnete Objekt mehr Speicherplatz benötigt. Dies kann in Ihrer eigenen Implementierung behandelt werden, indem Sie einen scrollbaren Bereich einführen, die Größe des übergeordneten Steuerelements ändern, eine art von Stapelreihenfolge oder eine beliebige Anzahl von Lösungen zum Messen oder Anordnen von Inhalten festlegen, die je nach beabsichtigter Funktionalität Ihres Layoutcontainers variieren können.

Gilt für:

Weitere Informationen