Поделиться через


FrameworkElement.SizeChanged Событие

Определение

Происходит при изменении значения свойства ActualHeight или ActualWidth в FrameworkElement.

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"/>

Тип события

Комментарии

SizeChanged Возникает при изменении размера объекта ( ActualHeight или ActualWidth), который находится после завершения проходов Measure и Arrange .

Данные события SizeChangedEventArgs для SizeChanged события предоставляют два свойства: значение PreviousSize , представляющее размер элемента до изменения макета, и значение NewSize , представляющее текущий размер. Чтобы получить сведения о высоте и ширине, используйте значения Height и Width значения структуры Size для этих свойств SizeChangedEventArgs в обработчике событий.

Одна из причин для обработки SizeChanged события заключается в том, чтобы узнать, изменилось ли соотношение ActualHeight элемента и ActualWidth из-за нового макета. Например, это может произойти, если пользователь изменил размер окна приложения и общее представление приложения теперь является узким.

SizeChanged происходит во время начального макета элементов на странице, когда приложение впервые активируется, так как значения ActualHeight и ActualWidth для элементов пользовательского интерфейса не определены до того, как произойдет макет. Они получают значения только во время начального прохода макета, поэтому возникает событие SizeChanged. После этого, в течение жизненного цикла приложения, событие может снова возникать из элемента, SizeChanged если ActualHeight значения и изменяются ActualWidth по другим причинам. К ним относятся следующие объекты.

  • Код, который специально настраивает значения Height и Width этого элемента.
  • Код, который изменяет свойства ограничения (например , MinHeight или MaxHeight , влияющие на ActualHeight).
  • Обновлены значения привязки данных или применены новые стили, которые влияют на любые связанные с макетом свойства FrameworkElement.
  • Код, который корректирует размеры контейнера, например Panel или ListBox , который является родительским для элемента. Это часто приводит к запуску этапа макета. Из-за новых условий макета в автономном дочернем элементе теперь может быть доступно больше или меньше места, что может привести к порождению ActualHeight и ActualWidth для элемента внутри.
  • Другие изменения, происходящие во время выполнения, которые изменяют пространство макета, даже если они не изменяют свойства макета FrameworkElement напрямую. Например, список, основанный на привязке данных к элементам, может обновляться или обновляться, что может привести к изменению размера элементов, элементов управления, представлений списков и т. д. Представление списка, поддерживающее добавочную загрузку, может получить больше элементов и развернуть представление списка.
  • Пользователь изменяет размер окна приложения (возникает Window.SizeChanged ), что, в свою очередь, влияет на размер страницы верхнего уровня и, возможно, на размеры элементов, производных от адаптивного макета на этой странице, которые используют макет "Auto" или выравнивание и Stretch не указывают измерения.
  • Изменения ApplicationView или DisplayInformation , которые в конечном итоге влияют на размеры окна и страницы, а также, возможно, на все элементы пользовательского интерфейса.

Не обязательно избегать вызова других API, влияющих на макет текущего объекта из обработчика SizeChanged . Например, установка высоты или ширины; вызов InvalidateMeasure или UpdateLayout; вызов Метода ApplyTemplate; любая операция, которая может изменить размер дочерних элементов и, таким образом, сделать родительский макет недействительным. Подсистема макета имеет внутреннюю логику, которая стабилизирует значения до того, как объект снова активирует событие, поэтому логика обычно достаточно надежна, чтобы избежать условий цикла. Однако по-прежнему можно непреднамеренно определить размер или циклы отрисовки, которые могут зависнуть приложение, что обычно вызывает исключения, такие как LayoutCycleException , а не зависание. Это происходит, если логика обработчика в сочетании с окружающим макетом не может достичь конечного результата для размера соответствующего объекта.

Если положение объекта в родительском контейнере изменяется, но не его размер, SizeChanged это не происходит.

LayoutUpdated — это аналогичное событие, но LayoutUpdated оно также активируется для изменения положения. Кроме того, LayoutUpdated вхождение не ограничивается свойствами макета конкретного объекта, оно сообщает о всем визуальном дереве, в котором содержится объект. LayoutUpdated сообщает, что что-то в общем визуальном дереве, содержащее объект, изменилось, но особенности макета (размер, положение) объекта, к которому прикреплен обработчик, могли не измениться.

Хотя это событие использует делегат, связанный с RoutedEventHandler, и класс, производный от RoutedEventArgs, в качестве данных события, это событие не является на самом деле перенаправленным событием. Он не проходит через дерево объектов. Он может обрабатываться только для элемента, который является источником события (иными словами, отправителя). OriginalSource в данных события для этого события всегда nullимеет значение , поэтому не пытайтесь использовать OriginalSource.

Применяется к

См. также раздел