내용 보기

작성자

관리자 (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")]

[assemblyXmlnsDefinition("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에 다음을 추가해보았죠

[assemblyXmlnsDefinition("http://illef.tistory.com""MyProject")]

그리고 이 프로젝트를 다른 프로젝트에서 참조하고 XAML에서 해보니오오 인텔리센스로http://illef.tistory.com이 튀어 나오네요~

출처1

http://illef.tistory.com/24

출처2