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)가 변경되어 측정값정렬 단계가 완료된 후에 발생합니다.

이벤트에 대한 SizeChangedSizeChangedEventArgs 이벤트 데이터는 레이아웃 변경 전에 요소의 크기를 나타내는 PreviousSize 값과 현재 크기를 나타내는 NewSize 값의 두 가지 속성을 제공합니다. 높이 및 너비 정보를 얻으려면 이벤트 처리기 내에서 이러한 SizeChangedEventArgs 속성에 대해 Size 구조 값의 HeightWidth 값을 사용합니다.

이벤트를 처리하는 SizeChanged 한 가지 이유는 새 레이아웃으로 인해 요소의 ActualHeightActualWidth 의 비율이 변경되었는지 여부를 확인하는 것입니다. 예를 들어 사용자가 앱 창의 크기를 조정하고 전체 앱 보기가 좁은 보기인 경우 이 문제가 발생할 수 있습니다.

SizeChanged 는 레이아웃이 발생하기 전에 UI 요소에 대한 ActualHeightActualWidth 값이 정의되지 않으므로 앱이 처음 활성화될 때 페이지에 있는 요소의 초기 레이아웃 중에 발생합니다. 초기 레이아웃 단계 중에만 값을 얻게 되므로 SizeChanged 이벤트가 발생합니다. 그 후 앱의 수명 동안 및 ActualWidth 값이 SizeChanged 다른 이유로 변경되면 ActualHeight 요소에서 이벤트가 다시 발생할 수 있습니다. 여기에는 다음이 포함됩니다.

  • 해당 요소의 높이너비 를 특별히 조정하는 코드입니다.
  • 제약 조건 속성을 변경하는 코드(예: ActualHeight에 영향을 주는 MinHeight 또는 MaxHeight).
  • 새로 고쳐진 데이터 바인딩 값 또는 FrameworkElement의 레이아웃 관련 속성에 영향을 주는 새 스타일이 적용되었습니다.
  • 요소의 부모인 Panel 또는 ListBox 와 같은 컨테이너의 크기를 조정하는 코드입니다. 이는 종종 레이아웃 패스를 트리거합니다. 새 레이아웃 조건으로 인해 포함된 자식 요소의 사용 가능한 공간이 더 많거나 적을 수 있으며, 이로 인해 내 요소에 대한 새 ActualHeightActualWidth 가 생성될 수 있습니다.
  • 런타임에 발생하는 다른 변경 사항으로 , FrameworkElement 레이아웃 속성을 직접 변경하지 않더라도 레이아웃 공간을 변경합니다. 예를 들어 항목에 대한 데이터 바인딩을 기반으로 하는 목록은 새로 고침 또는 업데이트될 수 있으며, 이로 인해 항목, 항목 컨트롤, 목록 보기 등의 크기가 변경될 수 있습니다. 또는 증분 로드를 지원하는 목록 보기는 더 많은 항목을 가져오고 목록 보기를 확장할 수 있습니다.
  • 사용자는 앱 크기(Window.SizeChanged 가 발생함)를 변경하여 최상위 페이지의 크기와 "자동" 레이아웃 또는 Stretch 맞춤을 사용하고 차원을 지정하지 않은 해당 페이지 내 요소의 적응형 레이아웃 파생 크기에 영향을 줍니다.
  • ApplicationView 변경 또는 DisplayInformation 변경은 궁극적으로 창 및 페이지 차원 및 잠재적으로 내의 모든 UI 요소에 영향을 줍니다.

처리기 내에서 SizeChanged 현재 개체의 레이아웃에 영향을 주는 다른 API를 호출하지 않아도 됩니다. 예: 높이 또는 너비 설정; InvalidateMeasure 또는 UpdateLayout 호출 ApplyTemplate을 호출합니다. 자식 요소의 크기를 조정하여 부모 레이아웃을 무효화할 수 있는 모든 작업입니다. 레이아웃 엔진에는 개체가 이벤트를 다시 실행하기 전에 값을 안정화하는 내부 논리가 있으므로 논리는 일반적으로 루핑 조건을 방지할 수 있을 만큼 강력합니다. 그러나 일반적으로 실제로 중단되지 않고 LayoutCycleException 과 같은 예외를 throw하는 앱을 중단시킬 수 있는 크기 조정 또는 렌더링 루프를 실수로 정의할 수 있습니다. 이는 주변 레이아웃과 결합된 처리기 논리가 관련 개체의 크기에 대한 최종 결과에 도달할 수 없는 경우에 발생합니다.

부모 컨테이너 내의 개체 위치가 변경되지만 크기 SizeChanged 는 변경되지 않으면 이 발생하지 않습니다.

LayoutUpdated 는 비슷한 이벤트이지만 LayoutUpdated 위치 변경에 대해서도 발생합니다. LayoutUpdated 또한 발생은 특정 개체의 레이아웃 속성으로 범위가 지정되지 않으며 개체가 포함된 전체 시각적 트리에 대해 보고합니다. LayoutUpdated 는 개체가 포함된 전체 시각적 트리 내의 항목이 변경되었지만 처리기가 연결된 개체의 레이아웃 세부 정보(크기, 위치)가 변경되지 않았을 수 있음을 알 수 있습니다.

이 이벤트는 RoutedEventHandler 관련 대리자와 RoutedEventArgs 파생 클래스를 이벤트 데이터로 사용하지만 이벤트는 실제로 라우트된 이벤트가 아닙니다. 개체 트리를 통해 버블되지 않습니다. 이벤트를 시작하는 요소(즉, 보낸 사람)에서만 처리할 수 있습니다. 이 이벤트에 대한 이벤트 데이터의 OriginalSource는 항상 null이므로 를 사용하지 OriginalSource마세요.

적용 대상

추가 정보