FrameworkElement.SizeChanged Ereignis
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.
Tritt auf, wenn entweder die ActualHeight - oder die ActualWidth-Eigenschaft den Wert für ein FrameworkElement ändert.
public:
virtual event SizeChangedEventHandler ^ SizeChanged;
// Register
event_token SizeChanged(SizeChangedEventHandler const& handler) const;
// Revoke with event_token
void SizeChanged(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::SizeChanged_revoker SizeChanged(auto_revoke_t, SizeChangedEventHandler const& handler) const;
public event SizeChangedEventHandler SizeChanged;
function onSizeChanged(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("sizechanged", onSizeChanged);
frameworkElement.removeEventListener("sizechanged", onSizeChanged);
- or -
frameworkElement.onsizechanged = onSizeChanged;
Public Custom Event SizeChanged As SizeChangedEventHandler
<frameworkElement SizeChanged="eventhandler"/>
Ereignistyp
Hinweise
SizeChanged wird ausgelöst, wenn sich die Größe ( entweder ActualHeight oder ActualWidth) für das Objekt geändert hat, das nach Abschluss des Measure - und Arrange-Übergebens erfolgt.
Die SizeChangedEventArgs-Ereignisdaten für das SizeChanged Ereignis stellen zwei Eigenschaften bereit: der PreviousSize-Wert , der die Größe des Elements darstellt, bevor die Layoutänderung erfolgt ist, und der NewSize-Wert , der die aktuelle Größe darstellt. Verwenden Sie zum Abrufen der Höhen- und Breiteninformationen die Werte für Höhe und Breitedes Größenstrukturwerts für diese SizeChangedEventArgs-Eigenschaften innerhalb des Ereignishandlers.
Ein Grund für die Behandlung des SizeChanged Ereignisses besteht darin, zu sehen, ob sich das Verhältnis des ActualHeight-Elements im Vergleich zu ActualWidth aufgrund eines neuen Layouts geändert hat. Dies kann beispielsweise passieren, wenn der Benutzer die Größe des App-Fensters geändert hat und die App-Gesamtansicht nun eine schmale Ansicht ist.
SizeChanged tritt während des anfänglichen Layouts von Elementen auf einer Seite auf, wenn die App zum ersten Mal aktiviert wird, da die Werte ActualHeight und ActualWidth für UI-Elemente vor dem Layout nicht definiert sind. Sie erhalten nur Werte während des anfänglichen Layoutdurchlaufs und somit das SizeChanged-Ereignis. Anschließend kann das SizeChanged Ereignis während der Lebensdauer einer App erneut aus einem Element ausgelöst werden, wenn sich die ActualHeightActualWidth Werte aus anderen Gründen ändern. Dazu zählen:
- Code, der die Höhe und Breite dieses Elements speziell anpasst.
- Code, der die Einschränkungseigenschaften ändert (z. B. MinHeight oder MaxHeight , der die ActualHeight-Eigenschaft beeinflusst).
- Datenbindungswerte werden aktualisiert oder neue Formatvorlagen angewendet, die sich auf eine der layoutbezogenen Eigenschaften von FrameworkElement auswirken.
- Code, der die Abmessungen eines Containers wie ein Panel - oder ListBox-Element anpasst, das übergeordnete Element eines Elements ist. Dies löst häufig einen Layoutdurchlauf aus. Aufgrund der neuen Layoutbedingungen kann ein enthaltenes untergeordnetes Element jetzt mehr oder weniger Platz zur Verfügung haben, was zu einem neuen ActualHeight - und ActualWidth-Element für ein Element führen könnte.
- Andere Änderungen, die zur Laufzeit auftreten, die den Layoutbereich ändern, auch wenn sie nicht direkt FrameworkElement-Layouteigenschaften ändern. Beispielsweise kann eine Liste, die auf der Datenbindung mit Elementen basiert, aktualisiert oder aktualisiert werden. Dies kann zu Größenänderungen in Elementen, Elementsteuerelementen, Listenansichten usw. führen. Oder eine Listenansicht, die das inkrementelle Laden unterstützt, ruft möglicherweise weitere Elemente ab und erweitern die Listenansicht.
- Der Benutzer ändert die Größe des App-Fensters (Window.SizeChanged tritt auf), was wiederum die Größe der Seite auf oberster Ebene und möglicherweise die adaptiven layoutbasierten Größen von Elementen innerhalb dieser Seite beeinflusst, die das Layout oder
Stretchdie Ausrichtung "Auto" verwenden und keine Dimensionen angegeben haben. - ApplicationView-Änderungen oder DisplayInformation-Änderungen , die sich letztendlich auf die Fenster- und Seitenabmessungen auswirken, und potenziell alle UI-Elemente innerhalb.
Es ist nicht unbedingt erforderlich, andere APIs aufzurufen, die das Layout des aktuellen Objekts innerhalb eines SizeChanged Handlers beeinflussen. Beispiel: Festlegen von Höhe oder Breite; Aufrufen von InvalidateMeasure oder UpdateLayout; Aufrufen von ApplyTemplate; jeder Vorgang, der die Größe untergeordneter Elemente ändern und somit das übergeordnete Layout ungültig macht. Das Layoutmodul verfügt über interne Logik, die die Werte stabilisiert, bevor ein Objekt das Ereignis erneut auslöst, sodass die Logik in der Regel robust genug ist, um Schleifenbedingungen zu vermeiden. Es ist jedoch weiterhin möglich, versehentlich Größen- oder Renderingschleifen zu definieren, die Ihre App hängen können, was im Allgemeinen Ausnahmen wie LayoutCycleException auslöst, anstatt tatsächlich hängend. Dies geschieht, wenn Die Handlerlogik in Kombination mit dem umgebenden Layout nicht in der Lage ist, ein Endergebnis für die Größe des relevanten Objekts zu erreichen.
Wenn sich die Position des Objekts innerhalb eines übergeordneten Containers ändert, aber nicht die Größe, SizeChanged tritt nicht auf.
LayoutUpdated ist ein ähnliches Ereignis, wird aber LayoutUpdated auch für Positionsänderungen ausgelöst.
LayoutUpdated Außerdem wird das Vorkommen nicht auf die Layouteigenschaften eines bestimmten Objekts festgelegt, es wird auf die gesamte visuelle Struktur gemeldet, in der ein Objekt enthalten ist.
LayoutUpdated informiert Sie darüber, dass sich etwas innerhalb der gesamten visuellen Struktur, die das Objekt enthält, geändert hat, aber die Layoutspezifischen (Größe, Position) des Objekts, an das der Handler angefügt ist, möglicherweise nicht geändert haben.
Obwohl dieses Ereignis einen RoutedEventHandler-bezogenen Delegaten und eine routedEventArgs-abgeleitete Klasse als Ereignisdaten verwendet, ist das Ereignis nicht wirklich ein Routingereignis. Es wird nicht durch eine Objektstruktur blasen. Es kann nur für das Element behandelt werden, das das Ereignis (mit anderen Worten, den Absender) stammt.
OriginalSource in Ereignisdaten für dieses Ereignis ist immer null, daher versuchen Sie nicht, die OriginalSource.