Silverlight クライアント SDKの共通 XAML 名前空間

xmlnsはその名の通りXML用に定義されたネームスペースのことです。これにより、タグの競合を防ぐことができます。プログラム言語のネームスペースと同じ役割を果たします。
今回は、xmlnsについて見ていきます。

アジェンダ

  • オーソドックスなxmlns指定方法
  • xmlnsのコンパイルエラー
  • 集約されたXAMLネームスペース
  • 共通XAMLネームスペースで困ったこと

オーソドックスなxmlns指定方法

xmlnsのフォーマットは下記のようになります。

xmlns:【XMLネームスペース名】:"clr-namespace:【ネームスペース】;assebmly=【アセンブリ名】"

具体的には、このようになります。

xmlns:contorlData="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

xmlnsのコンパイルエラー

xmlns:Data="clr-namespace:System.Windows.Controls; assembly=System.Windows.Controls.Data"

のように、assemblyの前にスペースを入れるとコンパイルエラーになるので注意しましょう。

集約されたXAMLネームスペース

XAMLではxmlnsでXAMLのネームスペースを指定できます。通常では、アセンブリ名とアセンブリ内のネームスペースを指定する必要があります。しかし、Silverlightの標準SDKなどのXAMLネームスペースは、共有識別子として、一つのxmlnsで複数のクラスに参照できるようになっています。

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

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

が該当します。
詳細は下記のページをご覧ください。
Silverlight ライブラリのプレフィックスとマッピング

共通XAMLネームスペースで困ったこと

上記のような共通XAMLネームスペースは便利な場合が多いのですが、一つに取りまとめているがゆえに困る場合があります。例えば、サードパーティ製コントロールを使用しているときに、アセンブリ参照が足りずに実行時エラーが起きたとします。このとき、XAMLを見ても、共通XAMLネームスペースでマージされてしまっていると、どのアセンブリを足せばよいか判断できません。どのアセンブルとネームスペースを共有化したのかをVisuslStudioから知る手段をぜひ実装してほしいと思いました。