내용 보기
작성자
관리자 (IP : 172.17.0.1)
날짜
2020-07-10 01:44
제목
[WPF] WPF Multiple Namespace mapping
음.. 제목이 적당한지는 잘 모르겠네요. 예전부터 사실 궁금한 것이 있었는데~ 왜 보통 WPF를 사용할 때 XAML에서 namespace를 선언 하지 않습니까? xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" default namespace는 WPF 기본 Control들을 사용하기 위한 namespace이고, x:prefix로 사용하는 namespace는 XAML 키워드를 사용하기 위한 namespace이지요. 여기에 사용하고 싶은 namespace를 추가할 수도 있지요. 가령 mscorlib의 System namespace를 사용하고 싶다면 xmlns:system="clr-namespace:System;assembly=mscorlib" 요로코롬 사용해주면 되구요. 여러분이 직접 만든 namespace도 위와 같은 식으로 선언해 XAML에서 여러분의 Object를 선언해 줄 수도 있습니다. 그런데… clr-namespace:namespace;assembly=assemblyName과 같은 방법 말고 http://를 사용해서 정의할 수는 없을 까요? 왠지 뽀대나는 느낌이 들 뿐아니라 편리하기도 할 것 같은데요, 예를 들어 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 이namespace에는 하나 이상의 namespace가 mapping되어 있습니다. 이와 같이 여러namespace를 http namespace를 사용 해 묶어서 정의 할 수있으면 좋을 것 같은데 말이죠. 당연히 방법이 있겠죠? 여러군데 찾아 보았지만 발견하지 못했는데 WPFToolKit 소스 코드에 해답이 있더군요. assemblyInfo에 다음과 같이 정의되어 있더군요. [assembly:XmlnsDefinition("http://schemas.microsoft.com/wpf/2008/toolkit","Microsoft.Windows.Controls")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/wpf/2008/toolkit","Microsoft.Windows.Controls.Primitives")] 오호라~ 요녀석이군요. 캬캬캬 Microsoft.Windows.Controls라는 namespace와 Microsoft.Windows.Controls.Primitives라는namespace를 http://schemas.microsoft.com/wpf/2008/toolkit 에 매핑하고 있네요. 시험삼아 저도 해보았습니다. Project를 생성하고 AssemblyInfo.cs에 다음을 추가해보았죠 [assembly: XmlnsDefinition("http://illef.tistory.com", "MyProject")] 그리고 이 프로젝트를 다른 프로젝트에서 참조하고 XAML에서 해보니~ 오오 인텔리센스로http://illef.tistory.com이 튀어 나오네요~ |
출처1
http://illef.tistory.com/24
출처2