삽질의 현장/- .NET

#103_닷넷(.NET)_ WPF_ XAML의 기능

shovelman 2015. 11. 25. 19:59

 

안녕하세요 삽잡이입니다.


 


대부분의 XAML은 UI를 구성하는 곳에서만 사용한다고 생각하시지만,

사실 또 다른 곳에서도 사용이 됩니다.


처음 WPF에 대한 프로젝트르 생성했을때 있는 App.xaml만 봐도 알 수 있습니다.

App은 UI가 아닙니다. 

따라서, UI에 관련된 기능이 들어가있지않습니다.

그런데도 XAML 언어를 통해 작성할 수 있습니다.

C# 코드에서 만들어낸 모든 객체들을 만들 수 있는 것입니다.


물론, 행동을 구현하는 Logic 영역에 대한 코드는 만들 수 없습니다.

그런데, 기본 생성자가 있다는 전제하에

C#에서 만든 모든 객체들을 만들어낼 수 있지요.



왜 XAML 언어를 통해 이러한 기능들이 가능할까요?

사실 .xaml 파일은 .cs 파일로 번역이 되었다가 

다시 컴파일 되어 어셈블리가 생성이 됩니다.


UI 부분과 그 외에 기능들을 .xaml 파일로,

그리고 행동에 대한 기능들을 .cs 파일로 나눠서 구현을 하더라도

결국은 모두 합쳐져서 .exe 바이너리 파일이 생성되는 것입니다.


그런데... 아무것도 구현해놓지도 않고 실행을 하는데

Window 창이 하나가 뜹니다... 왜 그럴까요?


 

누가 Window를 띄우라고 하는 것일까요?


사실, App.xaml 파일을 보시면, 정답을 알 수 있습니다.



.xaml 파일을 보니 'StartupUri'라는 속성이 있습니다.

아하 이녀석이 Window을 띄워주는 것이군요.


App이 동작시키는 최초의 윈도우가 바로 StartupUri에 지정한 녀석입니다.

해당 속성의 값을 바꿔주면 해당 xaml의 윈도우가 실행될 것입니다.


물론, Window을 띄우는 방법이 이 방법만 있는 것이 아닙니다.



이와같이 App.xaml.cs 파일에 객체 생성을 하고 

실행에 대한 코드를 작성한 뒤,



이와 같이 이벤트를 등록하는 것과 같이 해주면 됩니다.

즉, 이벤트를 만드는 것과 똑같고,

우리는 해당 이벤트에 대한 핸들러를 구현해주면 되겠지요.


어플리케이션이 실행될 때,

즉, Run() 메서드가 호출되기 직전에 이벤트가 발생하는 것입니다.

그러면 등록해놓은 핸들러가 실행되는 셈이죠.


그리고 사실, MainWindow는 자동으로 등록 됩니다. 

따라서 알아서 실행이 되지요.


이처럼 다양한 방식으로 윈도우를 실행시킬 수 있습니다.

이 외에도 C# 영역 즉, 로직 영역에서 아에 실행시킬 수도 있습니다.


  

Run() 메서드를 통해 실행되기 직전에

app.StartUp에 등록해놓은 이벤트가 발생하게 됩니다.


Main Window를 직접 띄울 수 있도록 코드화 하듯,

버튼과 같은 컨트롤들도 띄울 수 있도록 코드화할 수 있습니다.



이와 같이 Button을 하나 만들고,

버튼의 'Click' 이벤트가 발생했을 때 

button_Click이라는 이벤트 핸들러가 발생하도록 작성합니다.


이 또한, xaml에서는 쉽게

[속성]에서 Contents 설정과 Event 설정을 할 수 있지요...



결론은, 그냥 .xaml에서 사용하는게 훨씬 편하다는 것입니다. 허허...



이번시간은 여기까지 하도록 하겠습니다.


이상 삽잡이였습니다!