: ScrollChanged 이벤트가 scroll이 안정화 되었을 때(즉 ScrollViewer가 정지했을 때) 만 발생하도록 한다.
이 속성의 기본값은 'False' 로 되어 있고, 이를 'True'로 변경하면 위와 같이 동작하게 된다.
프로젝트 중에 ScrollViewer 내부에 수많은 이미지를 보여주도록 하는 경우가 있었는데, 메모리 상의 문제로 화면에 보여지는 영역의 이미지를 로드하고, ScrollChanged 이벤트가 발생할 경우 화면에 보여지는 영역을 다시 계산해서 해당 영역의 이미지를 로드하도록 구현하였다. 이렇게 했더니 스크롤을 이동할 때마다 ScrollChanged 이벤트가 많이 발생해서 퍼포먼스 상의 문제가 있어, IsDeferredScrollingEnabled 속성을 이용해 퍼포먼스를 높인 경험이 있었다.
Adorner 는 UIElement 위에 정보, 혹은 기능을 표시하기 위해 사용하는 사용자 지정 FrameworkElement 이다.
일반적인 용도는
- UIElement 에서 사용자가 크기 조정, 회전, 위치 변경과 같은 기능 핸들 추가
- 다양한 상태를 나타내거나 이벤트에 응답하기 위한 시각적 피드백 제공
- 그 외의 다양한 시각적 효과 overlay
등이 되겠다.
Adorner 는 UIElement 내에 AdornerLayer 라는 레이어를 생성하여 그 위에 Adorner 객체를 위치시키므로 해당 UIElement 내부의 어떤 객체들보다 상위에 나타난다. 따라서 항상 위에 나타나야 하는 객체들 - 상태 정보, 기능 핸들 등은 Adorner 를 사용하는 것이 Z-index 등을 조절하는 것보다 편한 방법이 될 것이다.
Adorner 클래스를 사용하는 방법은 다음과 같다.
1. Adorner 클래스를 상속받아 새로운 클래스를 만든다.
- Adorner 클래스는 추상 클래스(Abstract Class) 이므로 직접 사용할 수 없다.
- Rendering 을 구현해야 하는데, 일반적으로 OnRender() 메서드를 오버라이드(override)해서 사용한다.
Visual Studio 2010을 사용하는 중에, 특정 프로젝트에서 Custom Control(WPF) 를 추가하려고 했으나 리스트에 해당 item 이 나타나지 않았다.
다른 프로젝트에서 아이템을 추가(프로젝트 > 우클릭 - 추가 > 새로운 아이템 > Visual C# items > WPF ) 하면 Window, Page, User Control, Resource Dictionary 등의 8개의 메뉴가 나오는데 해당 프로젝트에서는 아래처럼 User Control 하나만 나왔다.
이유가 혹시 참조를 안했나 해서 확인도 다 해보고, 프로젝트 속성도 검토해보았으나 이유를 찾지 못했는데, 그 해결책은 매우 간단하다.
해당 프로젝트 파일(*.csproj 파일) 을 메모장으로 열어 첫번째 <PropertyGroup> 밑에 다음의 코드를 삽입한다.