XmlnsDefinitionAttributeでXAML 名前空間と CLR 名前空間の割り当てを指定する

Silverlightでは、xmlnsを

xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 

のように指定するとsdkというXAMLネームスペースから、複数のCLRネームスペースにアクセスできます。
今回は、xmlnsに複数の自前のCLRネームスペースを割り当てる方法を紹介します。

アジェンダ

  • 複数CLRネームスペースを持ったプロジェクトを用意
  • AssemblyInfoにXmlnsDefinitionAttributeを定義
  • xmlnsに割り当てれらたCLRネームスペースの確認
  • まとめ

複数CLRネームスペースを持ったプロジェクトを用意

複数のCLRネームスペースを持ったプロジェクトを作成します。とりあえずクラスが定義できればよいので、メンバは定義しません。

namespace SilverlightClassLibrary1.A
{
    public class ClassA
    {

    }
}
namespace SilverlightClassLibrary1.B
{
    public class ClassB
    {

    }
}

AssemblyInfoにXmlnsDefinitionAttributeを定義

xmlnsに複数のCLRネームスペースを割り当てるためには、XmlnsDefinitionAttributeを使用します。

SilverlightClassLibrary1のAssemblyInfo.csにXmlnsDefinitionを定義します。xmlNamespaceネームスペースは、一意に決まる文字列ならば何でもかまいません。Silverlightのxmlnsをまねて、WebサイトのURLを使用するのが望ましいでしょう。

//// SilverlightClassLibrary1.AssemblyInfo.cs

// 第一引数は、xmlNamespaceのネームスペース
// 第二引数は、対応づけるCLRのネームスペース
[assembly: XmlnsDefinition("http://schemas.azest.co.jp/xaml", "SilverlightClassLibrary1.A")]
[assembly: XmlnsDefinition("http://schemas.azest.co.jp/xaml", "SilverlightClassLibrary1.B")]

xmlnsに割り当てれらたCLRネームスペースの確認

メインプロジェクトから、XmlnsDefinitionAttributeで割り当てたCLRネームスペースにアクセスできるか確認します。
最初にXAMLにxmlnsを定義ます。

<!--XmlnsDefinitionSample.MainPage.xaml-->
xmlns:library="http://schemas.azest.co.jp/xaml"

Resourcesで、ClassAクラスとClassBにアクセスできることを確認します。

まとめ

XmlnsDefinitionAttributeを使って、1つのXAMLネームスペースに複数のCLRネームスペースを紐づける方法を紹介しました。