다음을 통해 공유


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

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

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

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

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

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

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

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

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

적용 대상

추가 정보