UIElement.Measure(Size) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Updates desiredSize eines UIElements aus. In der Regel rufen Objekte, die ein benutzerdefiniertes Layout für ihre untergeordneten Layoutelemente implementieren, diese Methode aus ihren eigenen MeasureOverride-Implementierungen auf, um ein rekursives Layoutupdate zu bilden.
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)
Parameter
- availableSize
- Size
Der verfügbare Platz, den ein übergeordnetes Element einem untergeordneten Objekt zuordnen kann. Ein untergeordnetes Objekt kann einen größeren Platz anfordern, als verfügbar ist. Die angegebene Größe kann berücksichtigt werden, wenn in diesem bestimmten Container bildlauf- oder andere Größenänderungsverhalten möglich ist.
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 seine eigene bekannte Größenbeschränkung behandelt.
- Gibt seine Größe zurück (in diesem Fall gibt dieser einfache Bereich eine feste Größe anstelle einer Größe zurück, die bei der Akkumulation 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
Der Measure-Aufruf erreicht möglicherweise eine MeasureOverride-Implementierung dieser spezifischen Klasse. Andernfalls weisen die meisten FrameworkElement-Klassen ein implizites Standardlayoutverhalten für Measure auf.
availableSize kann eine beliebige Zahl von null bis unendlich sein. Elemente, die am Layout teilnehmen, sollten die Mindestgröße zurückgeben, die sie für eine bestimmte availableSize-Eigenschaft benötigen.
Die Berechnung der anfänglichen Layoutpositionierung in einer XAML-Benutzeroberfläche besteht aus einem Measure-Aufruf und einem Arrange-Aufruf in dieser Reihenfolge. Während des Measure-Aufrufs bestimmt das Layoutsystem die Größenanforderungen eines Elements mithilfe der availableSize-Messung . Während des Arrange-Aufrufs definiert das Layoutsystem die Größe und Position des Begrenzungsrahmens eines Elements.
Wenn ein Layout zum ersten Mal erstellt wird, verfügt es immer über einen Measure-Aufruf, der vor Anordnen erfolgt. Nach dem ersten Layoutdurchlauf kann jedoch ein Arrange-Aufruf erfolgen, ohne dass ein Measure vorangegangen ist. Dies kann passieren, wenn eine Eigenschaft, die sich nur auf Arrange auswirkt, geändert wird (z. B. Ausrichtung), oder wenn das übergeordnete Element eine Anordnung ohne Measure empfängt.
Bei einem Measure-Aufruf werden alle Arrange-Informationen automatisch ungültig. Layoutupdates erfolgen in der Regel asynchron (zu einem Zeitpunkt, der vom Layoutsystem bestimmt wird). Ein Element spiegelt Möglicherweise nicht sofort Änderungen an Eigenschaften wider, die sich auf die Elementdimensionierung auswirken (z. B. Breite).