ちょっと戸惑ったのでメモ
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内で参照できるようになった。