FrameworkElement.SizeChanged Ereignis

Definition

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 immer dann ausgelöst, wenn sich die Größe (entweder ActualHeight oder ActualWidth) für das Objekt geändert hat, nachdem die Measure- und Arrange-Läufe abgeschlossen sind.

Die SizeChangedEventArgs-Ereignisdaten für das SizeChanged-Ereignis bieten zwei Eigenschaften: den PreviousSize-Wert , der die Größe des Elements vor der Layoutänderung darstellt, und den NewSize-Wert , der die aktuelle Größe darstellt. Verwenden Sie zum Abrufen der Höhen- und Breiteninformationen die Werte Höhe und Breite des Größenstrukturwerts für diese SizeChangedEventArgs-Eigenschaften in Ihrem Ereignishandler.

Ein Grund für die Behandlung des SizeChanged-Ereignisses besteht darin, zu ermitteln, ob sich das Verhältnis von ActualHeight und ActualWidth eines Elements aufgrund eines neuen Layouts geändert hat. Dies kann beispielsweise der Fall sein, wenn der Benutzer die Größe des App-Fensters geändert hat und die Gesamtansicht der App nun eine schmale Ansicht ist.

SizeChanged tritt während des anfänglichen Layouts von Elementen auf einer Seite auf, wenn die App zuerst aktiviert wird, da die ActualHeight- und ActualWidth-Werte für UI-Elemente nicht definiert sind, bevor das Layout erfolgt. Sie erhalten nur Werte während des anfänglichen Layoutdurchlaufs und daher tritt das SizeChanged-Ereignis auf. Anschließend kann das SizeChanged-Ereignis während der Lebensdauer einer App aus einem Element erneut ausgelöst werden, wenn sich die Werte ActualHeight und ActualWidth aus anderen Gründen ändern. Dazu gehören:

  • Code, der die Höhe und Breite dieses Elements speziell anpasst.
  • Code, der die Einschränkungseigenschaften ändert (z. B . MinHeight oder MaxHeight , die den ActualHeight-Wert beeinflusst).
  • Datenbindungswerte wurden aktualisiert oder neue Stile angewendet, die sich auf eine der layoutbezogenen Eigenschaften von FrameworkElement auswirken.
  • Code, der die Dimensionen eines Containers wie panel oderListBox anpasst, der das übergeordnete Element eines Elements ist. Dadurch wird häufig ein Layoutdurchlauf ausgelöst. Aufgrund der neuen Layoutbedingungen kann ein enthaltenes untergeordnetes Element jetzt mehr oder weniger Speicherplatz zur Verfügung haben, was zu einem neuen ActualHeight - und ActualWidth-Element innerhalb eines Elements führen kann.
  • Andere Änderungen zur Laufzeit, die den Layoutraum ändern, auch wenn sie die FrameworkElement-Layouteigenschaften nicht direkt ändern. Beispielsweise kann eine Liste, die auf datenbindungsbasierten Elementen basiert, aktualisiert oder aktualisiert werden, was zu Größenänderungen in Elementen, Elementsteuerelementen, Listenansichten usw. führen kann. Oder eine Listenansicht, die inkrementelles Laden unterstützt, kann weitere Elemente abrufen und die Listenansicht erweitern.
  • Der Benutzer ändert die Größe des App-Fensters (Window.SizeChanged tritt auf), was sich wiederum auf die Größe der obersten Seite und möglicherweise auf die vom adaptiven Layout abgeleiteten Größen von Elementen innerhalb dieser Seite auswirkt, die das Layout "Auto" oder die Stretch-Ausrichtung verwenden und keine Dimensionen angeben.
  • ApplicationView-Änderungen oder DisplayInformation-Änderungen , die sich letztendlich auf die Fenster- und Seitendimensionen und möglicherweise alle darin enthaltenen UI-Elemente auswirken.

Es ist nicht unbedingt erforderlich, das Aufrufen einer anderen API zu vermeiden, die das Layout des aktuellen Objekts in einem SizeChanged-Handler beeinflusst. Beispiel: Festlegen von Höhe oder Breite; Aufrufen von InvalidateMeasure oder UpdateLayout; Aufruf von ApplyTemplate; jeder Vorgang, der die Größe untergeordneter Elemente ändern und somit das übergeordnete Layout ungültig macht. Die Layout-Engine verfügt über eine interne Logik, die die Werte stabilisiert, bevor ein Objekt das Ereignis erneut auslöst, sodass die Logik normalerweise robust genug ist, um Schleifenbedingungen zu vermeiden. Es ist jedoch immer noch möglich, versehentlich Größen- oder Renderingschleifen zu definieren, die Ihre App hängen können, was in der Regel Ausnahmen wie LayoutCycleException auslöst, anstatt tatsächlich zu hängen. Dies geschieht, wenn ihre 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 in einem übergeordneten Container ändert, aber nicht die Größe, tritt SizeChanged nicht auf.

LayoutUpdated ist ein ähnliches Ereignis, aber LayoutUpdated wird auch für Positionsänderungen ausgelöst. Außerdem ist layoutUpdated-Vorkommen nicht auf die Layouteigenschaften eines bestimmten Objekts festgelegt. Es wird für die gesamte visuelle Struktur gemeldet, in der sich ein Objekt befindet. LayoutUpdated informiert Sie darüber, dass sich in der visuellen Gesamtstruktur, die das Objekt enthält, etwas geändert hat, aber die Layoutspezifischen (Größe, Position) des Objekts, in dem der Handler angefügt ist, möglicherweise nicht geändert haben.

Obwohl dieses Ereignis einen RoutedEventHandler-bezogenen Delegat und eine von RoutedEventArgs abgeleitete Klasse als Ereignisdaten verwendet, handelt es sich bei dem Ereignis nicht wirklich um ein Routingereignis. Es wird nicht durch eine Objektstruktur blasen. Sie kann nur für das Element behandelt werden, das das Ereignis (also den Absender) hat. OriginalSource in Ereignisdaten für dieses Ereignis ist immer NULL. Versuchen Sie daher nicht, die OriginalSource zu verwenden.

Gilt für:

Weitere Informationen