삽질의 현장/- .NET

#104_닷넷(.NET)_ WPF_ XAML 특성&속성&이벤트

shovelman 2015. 11. 25. 20:57


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





.xaml 코드를 보게되면 속성들이 보입니다.


Window라는 Element가 Root Element가 되고

이 외에 지금 xmlns, xmlns:x, Title, Height, Widht와 같은 속성이 있습니다.

이들을 모두 Element의 특성이라고 부르지요.


이 중에서 아마 xmlns, xmlns:x가 뭔지 궁금해하시는 분들이 계실 것입니다.

이들은 XML Namespace를 뜻하는 특성들입니다.


전자는 기본 네임스페이스

후자는 X 네임스페이스라고 부릅니다.


xml은 Mark Up의 네임스페이스를 가지지요.

원래 네임스페이스를 앞에 명시해주는 것입니다.

우리가 지금껏 테그명만 썼던 것은 바로 기본 네임스페이스를 사용했기 때문입니다.



그런데 이 네임스페이스들이 어마어마합니다.

사실 실제 Site에 있는 것이 아니라, 

네임스페이스는 Uniqe해야하기 때문에 이렇게 만든것입니다.



해당 네임스페이스는

WPF을 선언한 것으로, 맨 위에 있는 x에 해당하지 않는

모든 태그들이 해당 네임스페이스에 해당한다는 것을 의미합니다.


그런데 네임스페이스가 있으면 있지, xmlns:x는 뭘까요?

제일 위에 보시면 x:Class라는 클래스가 있는 것이 보입니다.



이게 Visual Studio 내에 C# 코드로 만들어있는 네임스페이스입니다.

그리고 클래스이름이 MainWindow인 것이지요.


이는 XAML을 선언한 것입니다.

XAML은 WPF에 한정지어진 언어가 아닙니다.

WPF는 XAML 언어를 사용하는 방식중 하나이지요.


따라서, WPF에서 사용하는 XAML임을 명시하는 것입니다.

XAML 파일에 C#의 partial 클래스를 결합하기 위해서 쓴다고 생각하셔도 됩니다.


아하! x가 붙은 것들은 

XAML 코드와 C# 코드가 약속한 특성으로 온것임을 알 수 있습니다.




width, heigh 은 속성이고, Click은 이벤트입니다.



그런데, x가 붙은 Name은 속성, 이벤트가 아닌

디자인 코드에서 C# 컴파일이 되어 생긴 객체의 참조자를 의미하는 것이 됩니다.


만약, 버튼에 대해 이벤트가 발생했을 때 

어떠한 행위를 하고 싶다면 어떻게 해야할까요?

이벤트 핸들러를 만들어 버튼에 대해 행위를 처리하면 되겠지요.


그런데, 이 버튼을 변경하기 위해서는 이 놈의 참조자가 필요하지요.

즉, XAML과 C#간에 소통을 위해 참조자를 사용해야한다 이겁니다.



XAML에서 참조자를 만들어줍니다.

C#에서 만든 것이 아니라 XAML에서 만든 객체이기 때문이지요.


간단하게 생각하면,

XAML에서 만들어진 객체를 기본 생성자를 통해 만들고, 

해당 객체의 참조자가 btn이라는 것이 되겠지요.


.xaml과 .xaml.cs 둘을 연결하기 위한

XML Element의 특성일 뿐이지 속성이 아닌 사실을 기억하시길 바랍니다.


정리해봅시다.



XML의 Element에는 '이름'과 '특성'으로 나뉠 수 있습니다.

그리고 이 '특성'은 다시, 이름과 특성으로 이루어져있지요.


XML의 Element는 XAML에서 세가지의 특성으로 나눌 수 있는 것입니다.


태그의 이름이 C#의 객체라고 했고,

이 객체 안에는 속성이 있는 것입니다.

예를 들어 Button이라면 Width, Height 와 같은 속성이 있지요.

그리고 Click 했을 때 발생하는 이벤트도 있겠구요.


특성에 있는 것은 속성과 이벤트가 있는것이고,

이 둘과 다른 성격의 특성이 올 수 있는 것입니다.

이 특성은 객체의 것이 아니라는 소리지요.


단지, XAML이라는 특성으로써만 사용되는

진짜로 Mark Up 특성으로써만 존재하는 특성이 하나 더 있다는 것입니다.



여기서 x:Class는 해당 객체가 C#에 있는 클래스와 연결된 반쪽이라고 나타내고,

x:Name은 디자인 코드에서 작성한 이름이 참조자로 만들어진다는 것을 나타내는 것입니다.

C#, XAML간에 연결될 수 있는 참조자로 사용될

XAML에서만 사용할 수 있는 특성임을 기억하시길 바랍니다.


어려우실까봐 계속 말씀드리지만...

객체의 속성과, XAML내 특성이 있다는 것 이해하시면 좋을 것 같군요 ㅠㅠ



ㅜㅜ   





이와 같은 컨텐츠를 설정한 것은 

xaml.cs 파일에 가서 설정하는 것과 같습니다.



content로 btn을 선택한 것이기 때문에 같은 것입니다.

그런데, 이 Content는 내부적으로 AddChild()를 호출합니다.


윈도우는 하나의 콘텐츠만을 가질 수 있습니다.

즉, 윈도우는 하나의 자식만을 가질 수 있다는 것이죠.


결론적으로 해당 예제는, 

윈도우는 Contents로써 Button을 갖는다는 것이고,

AddChild() 메서드를 호출하는 것과 똑같습니다.

그리고, AddChild() 메서드를 호출시 

기존에 있던 항목들을 모두 Clear하고 콘텐츠를 선택하게 되죠.



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

이상 삽잡이였습니다!