WPF 프로젝트를 만들어서 Window 를 만들면
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
이런 Xaml 코드가 생긴 것을 볼 수 있다.
처음 WPF 를 접하면 "xmlns" 과 "xmlns:x" 가 약간 낯설다.
조금만 공부하면 저것들이 namespace 를 Xaml 코드에서 사용하기 위해서 정의한 것임을 알 수 있다.
참고> xmlns 기본 네임스페이스와 닷넷 네임스페이스의 맵핑 구조
wpf 에서는 xmal 에서 여러 DLL 에 정의된 namespace에 접근하기 위해서
XmlnsDefinition 을 통해서 몇 개의 URL 로 정의하여 매칭시켜놓았다.
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml", "System.Windows.Markup")] [assembly: XmlnsPrefix("http://schemas.microsoft.com/winfx/2006/xaml", "x")]
그리고 다른 namespace 에 정의된 것을 사용하려면 그 사용할 namespace 를 xmlns 를 통해서 특정한 이름에
매칭해주고 사용을 해야 한다.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:My="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Grid>
<My:MyControl />
</Grid>
</Window>
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "WpfApplication2")]
이런 코드를 추가하면 특정 namespace를 기본 namespace로 통합시킬 수 있다.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<MyControl />
</Grid>
</Window>
이렇게 별도의 namespace 선언 없이 바로 사용이 가능하다.
무분별하게 사용하면 충돌이 날 수도 있지만 잘 선별해서 사용하면 꽤 유용하게 쓸 수 있다.
단, 위의 예시에서 사용된 namespace 들을 보면 알 수 있겠지만
XmlnsDefinition 을 통해서 namespace 를 통합했을 경우, 동일한 프로젝트에서는 적용이 안 된다.
그 프로젝트를 다른 곳에서 참조했을 경우에만 제대로 인식이 되는 문제가 있으니
동일한 프로젝트에서는 namespace를 명시적으로 사용하여야 한다.
'Dev::DotNet > WPF' 카테고리의 다른 글
NetAdvantage XamDockManager 의 Menu 비활성화 (0) | 2013.12.02 |
---|---|
ComboBox 의 SelectedValue 와 SelectedItem 의 성능적 차이 (0) | 2013.11.29 |
WPF 에서 DoEvents (0) | 2013.11.18 |
WPF Visual Tree or Logical Tree 순회 (0) | 2013.11.13 |
NetAdvantage XamDockManager 의 Splitter 고정 (0) | 2013.11.08 |