본문 바로가기

C#,WPF

[WPF] Window의 크기에 따른 객체 크기 변화

Window 창의 크기를 변경시에 배치된 컨트롤 및 그래픽 등의 크기도 함께 변화할 경우
SizeChanged 라는 이벤트 로직을 간단히 구현하면 된다.
(본 포스팅은 열이블로그(http://shine10ee.blog.me/10080415289) 블로그의 내용을 기반으로 하며,
공부하면서 추가적인 분석을 한 글이다.)



ScaleTransform scale = new ScaleTransform();

와 같은 변화 하는 scale 객체를 클래스 내에 선언하기위해서


using
System.Windows.Media;

를 포함하도록 한다. 

먼저 Window class 에 멤버 변수를 선언한다.

double originWidth, originHeight;

Window 생성자에


originHeight = this.Height;

originWidth = this.Width;

를 통해 현재의 윈도우 크기를 초기화 해준다.

Loaded += new RoutedEventHandler(Window_Loaded); 를 넣어주며, 
이는 Window_Loaded 라는 따로 사용자가 정의한 함수를 개체로 받는데,

먼저 RoutedEventHandler 대리자는 MSDN 참고,

모든 라우트된 이벤트에서 공통되는 데이터 이외에 특정 이벤트 데이터가 없는 다양한 라우트된 이벤트을 처리할 메서드를 나타냅니다.



 public delegate void RoutedEventHandler(
Object sender,
RoutedEventArgs e
)
와 같이 정의 되어 있으며,
매개변수 sender은 System.Object 형식으로 이벤트 처리기가 연결되는 개체이다.
RoutedEventArgs e 는 System.Windows.routedEventArgs 형식으로 이벤트 데이터이다.



또한

Loaded 의 설명은 다음과 같다.

FrameWorkElement 클래스는 Windows Presentation Foundation (WPF) 요소에 대해 WPF 프레임워크 수준 속성, 이벤트 및 메서드 집합을 제공합니다.이 클래스는 UIElement에서 정의하는 WPF 핵심 수준 APIs을 기반으로 하는 제공된 WPF 프레임워크 수준 구현을 나타냅니다.

라고 MSDN 참고. (http://msdn.microsoft.com/ko-kr/library/system.windows.frameworkelement.aspx)

대상인 Window_Loaded 함수는 다음과 같은 소스.

void Window_Changed(object sender, SizeChangedEventArgs e)

{

   scale.ScaleX = e.NewSize.Width / originWidth;

   scale.ScaleY = e.NewSize.Height / originHeight;

   FrameworkElement rootElement = this.Content as FrameworkElement;

   rootElement.LayoutTransform = scale;


}


사이즈 변화 이벤트 인자인 SizeChangedEventArgs e 의 새로운 변화 사이즈 가로 세로길이를
기존에 클래스의 멤버로 선언한 최초 Width, Height 값으로 나눈다.
이를 scale객체(이 포스팅 가장 처음 선언하였음) 의 x, y 좌표에 넣어준다.
여기서 FrameworkElement 객체인 rootElement 에서 LayoutTransform 속성에 scale을 넣은것을 알 수 있는데
MSDN 참고 : 레이아웃을 수행할 때 이 요소에 적용해야 하는 그래픽 변환을 가져오거나 설정합니다




'C#,WPF' 카테고리의 다른 글

[WPF] 마우스 드래그 소스 분석  (0) 2012.02.26
[WPF] Animation 예제(회전)  (0) 2012.02.25
[C#.NET] Transform 와 마우스 이벤트  (0) 2012.02.25
[C#.NET] 델리게이트(Delegate)  (0) 2012.02.23
C# 기초다지기 간단정리(1/3)  (0) 2012.02.23