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.
Aktualisiert die DesiredSize eines UIElements. In der Regel rufen Objekte, die ein benutzerdefiniertes Layout für ihre untergeordneten Layoutelemente implementieren, diese Methode aus ihren eigenen MeasureOverride-Implementierungen auf, um eine rekursive Layoutaktualisierung 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 Speicherplatz, den ein übergeordnetes Objekt einem untergeordneten Objekt zuordnen kann. Ein untergeordnetes Objekt kann einen größeren Platz anfordern als das, was verfügbar ist. die bereitgestellte Größe kann berücksichtigt werden, wenn ein Bildlaufverhalten oder ein anderes Größenänderungsverhalten in diesem bestimmten Container möglich ist.
Beispiele
In diesem Beispiel wird MeasureOverride implementiert, um die Passlogik "Measure" für eine benutzerdefinierte Panelimplementierung anzupassen. Beachten Sie insbesondere diese Aspekte des Codes:
- Iterates over children.
- Ruft für jedes untergeordnete Element measure mithilfe einer Größe auf, die sinnvoll ist, basierend darauf, wie die Panellogik die Anzahl der untergeordneten Elemente und ihre eigene bekannte Größenbeschränkung behandelt.
- Gibt seine Größe zurück (in diesem Fall gibt dieses einfache Panel eine feste Größe anstelle einer Größe zurück, die beim Sammeln der Maße 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);
}
Hinweise
Der Measure-Aufruf erreicht potenziell eine MeasureOverride-Implementierung dieser bestimmten 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 verfügbare Größe 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 Anordnungsaufrufs schließt das Layoutsystem die Größe und Position des umgebenden Felds eines Elements ab.
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 ein Arrange-Aufruf jedoch ohne vorangehendes Measure erfolgen. 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 automatisch alle Informationen zum Anordnen ungültig. Layoutaktualisierungen 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 Größenanpassung von Elementen auswirken (z. B. Breite).