WPF XAMLで別アセンブリのCLR名前空間を宣言する。

More than 1 year has passed since last update.

ちょっと戸惑ったのでメモ

MyLib.dll内で宣言されたMyLibというCLR名前空間をXAML名前空間として宣言しようと、MyLib.dllをプロジェクトの参照設定に追加した後、同一アセンブリ内のCLR名前空間と同じように以下のようにXAMLに記述した。

xmlns:mylib="clr-namespace:MyLib"

で、mylib.dll中で定義されたクラスMyClassをスタティックリソースとして使用しようと

<Window.Resources>
  <mylib:MyClass x:Key="MyClass"/>
</Window.Resources>

などとしたら、名前空間MyLibにはMyClassが存在しないと怒られた。

MyLib.dllには間違いなくpublicなクラスとしてMyClassは存在するのでおかしいと思ったら、XAML名前空間の宣言に問題があった。

参照設定に追加してるから違いはないだろうと思い込んでいたら、キチンとアセンブリを明示してやる必要があるとのこと。具体的にはxmlnsで名前空間を宣言するさいに、assemblyを用いてアセンブリ名を指定すればよい。

<!-- MyLib.dll 内で宣言された名前空間MyLibを宣言する。 -->
xmlns:mylib="clr-namespace:MyLib;assembly=MyLib"

これで別アセンブリに定義されたクラスをXAML内で参照できるようになった。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.