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) на объекте, который находится после завершения прохождения мер и упорядочивания .
Данные событий SizeChangedEventArgs для SizeChanged события предоставляют два свойства: значение PreviousSize , представляющее размер элемента до изменения макета, а также значение NewSize , представляющее текущий размер. Чтобы получить сведения о высоте и ширине, используйте значения высоты и ширины значения структуры size для этих свойств SizeChangedEventArgs в обработчике событий.
Одна из причин обработки SizeChanged события заключается в том, чтобы узнать, изменились ли коэффициенты Фактическогоheight элемента и ActualWidth из-за нового макета. Например, это может произойти, если пользователь изменил размер окна приложения, а общее представление приложения теперь является узким.
SizeChanged происходит во время начального макета элементов на странице, когда приложение сначала активируется, так как значения ActualHeight и ActualWidth для элементов пользовательского интерфейса не определены до того, как будет выполняться макет. Они получают значения только во время прохождения начального макета, поэтому происходит событие SizeChanged. После этого во время существования SizeChanged приложения событие может снова запуститься из элемента, если ActualHeightActualWidth значения изменяются по другим причинам. К ним относятся:
- Код, который настраивает высоту и ширину этого элемента в частности.
- Код, изменяющий свойства ограничения (например, MinHeight или MaxHeight, влияющий на ActualHeight).
- Обновленные или новые стили привязки данных влияют на любые свойства, связанные с макетом FrameworkElement.
- Код, который настраивает размеры контейнера, например Panel или ListBox , который является родительским элементом элемента. Это часто запускает передачу макета. Из-за новых условий макета содержащийся дочерний элемент теперь может иметь больше или меньше места, и это может привести к новому ActualHeight и ActualWidth для элемента внутри.
- Другие изменения, которые происходят во время выполнения, которые изменяют пространство макета, даже если они не изменяются непосредственно в свойствах макета FrameworkElement . Например, список, основанный на привязке данных к элементам, может обновляться или обновляться, и это может привести к изменению размера элементов, элементов управления, представлений списков и т. д. Или представление списка, поддерживающее добавочную загрузку, может получить больше элементов и развернуть представление списка.
- Пользователь изменяет размер окна приложения (Window.SizeChanged ), который, в свою очередь, влияет на размер страницы верхнего уровня и, возможно, адаптивные размеры элементов, производных от макета в этой странице, которые используют макет "Авто" или
Stretchвыравнивание и не указывают измерения. - Изменения ApplicationView или изменения DisplayInformation , которые в конечном итоге влияют на размеры окна и страницы, а также, возможно, все элементы пользовательского интерфейса внутри.
Не обязательно вызывать другой API, влияющий на макет текущего объекта в обработчике SizeChanged . Например, установка высоты или ширины; вызов InvalidateMeasure или UpdateLayout; вызов ApplyTemplate; любая операция, которая может изменить размер дочерних элементов и таким образом отменить родительский макет. Подсистема макета имеет внутреннюю логику, которая стабилизирует значения до повторного срабатывания объекта, поэтому логика обычно достаточно надежна, чтобы избежать условий цикла. Однако можно по-прежнему непреднамеренно определять циклы размера или отрисовки, которые могут зависать в приложении, что обычно создает исключения, такие как LayoutCycleException , а не фактически висит. Это происходит, если логика обработчика в сочетании с окружающим макетом не может достичь конечного результата для размера соответствующего объекта.
Если позиция объекта в родительском контейнере изменяется, но не размер, SizeChanged не произойдет.
LayoutUpdated — это аналогичное событие, но LayoutUpdated также запускается для изменения положения. Кроме того, LayoutUpdated вхождение не ограничивается свойствами макета определенного объекта, оно сообщает всему визуальному дереву, в котором содержится объект.
LayoutUpdated сообщает о том, что что-то внутри общего визуального дерева, содержащего объект, изменилось, но особенности макета (размер, позиция) объекта, в котором связан обработчик, может не измениться.
Хотя это событие использует делегат, связанный с RoutedEventHandler, и класс, производный от RoutedEventArgs, в качестве данных о событиях, событие не является действительно перенаправленным событием. Он не пузырьк через дерево объектов. Его можно обрабатывать только в элементе, который возникает событие (другими словами, отправитель).
Исходный источник в данных о событиях для этого события всегда имеет значение null, поэтому не пытайтесь использовать этот код OriginalSource.