[名前空間]~.NETな日々.NETに関する技術を主に扱ってます。7自己紹介kazutoと言います。Frameworkを使用した開発をしています。16:24今回はXAMLで使用する名前空間についてです。今まで複数回で取り上げたXAML構文では、構文自体に焦点を当てるためにあえて名前空間を定義していませんでした。XAMLで使用される名前空間は、XML名前空間(xmlns)宣言を使用します。Foundation名前空間全体を既定として定義します。xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"また、WPFはXAMLを言語として使用するのでXAML名前空間も定義します。XAML名前空間は通常、名前空間のプレフィックスとして「x:」をプレフィックスとして割り当てます。テンプレートでは「x:」としてプレフィックスが割り当てられますので、XAML名前空間に割り当てるプレフィックスは「x:」にするのが良いでしょう。ここで少し、WPF名前空間とXAML名前空間の宣言についてMSDNを見てみます。つの実装という位置付けになります。言語は、準拠のために実装される特定の言語要素を指定します。プロセッサ実装を使用してアクセスできます。想定されるマークアップ構文の割り当てられた個別のプレフィックスを使用します。コード、および言語機能のドキュメントに適用されます。アプリケーションにも必要な一般的に使用されるさまざまな機能を定義します。ここで言われるXAML名前空間の機能を簡単に見てみます。Width="300"></Window>上記でピンクにハイライトされている部分に注目して下さい。ここではXAMLファイルのルート要素Windowにx:Class属性が定義されています。この属性はこのXAMLファイルのコードビハインド(部分クラス)を結合する為の属性です。上記属性では「Window1」と言う名前のランタイムコードファイルの部分クラスと結合される事を定義しています。次の例を見てみましょう。Width="300"x:Name="SampleWindow"></Window>上記ではルート要素Windowにx:Name属性が定義されており、値として"SampleWindow"となっています。この属性はインスタンス化されたオブジェクトを一意にする属性です。ランタイムコードでの変数名と同じです。WPFの基本クラスにはNameプロパティを持つクラスがあり、Nameプロパティに名前を設定する事はx:Name属性を使用する事と同じです。よってNameプロパティを持つクラスにx:Name属性とNameプロパティを同時に使用する事は出来ません。上述ではXML名前空間を使用した名前空間の使用方法でしたが、自前のアセンブリやXML名前空間の無いアセンブリを使用する場合はどのような方法があるでしょうか?その場合はXML名前空間宣言時に使用できるclr-namespaceトークンとassemblyトークンを使用します。xmlns:プレフィックス="clr-namespace:名前空間;assembly=アセンブリ名"青くハイライトされた部分がトークンになります。clr-namespaceトークンに名前空間を、assemblyトークンにアセンブリ名を指定する事で自前のアセンブリやXML名前空間の無いアセンブリを使用する事が出来るようになります。clr-namespaceトークンは「:」で区切り、assemblyトークンは「=」で区切るので注意して下さい。参照するクラスが同じアセンブリ内である場合、assemblyトークンは省略可能です。上記トークンを使用する場合は、参照数が少ない場合には良いですが、複数のアセンブリを使用する場合などではXAMLが冗長してしまいます。自前のアセンブリなどであるならばXML名前空間を定義し、共通して使用する物は同じXML名前空間にまとめるのが良いとされています。実際WPFのXML名前空間もそういった事よりXML名前空間によって集約されています。自前のアセンブリにXML名前空間を与える例を見てみましょう。アセンブリにXML名前空間を定義するにはSystem.Windows.Markup.XmlnsDefinitionAttribute属性クラスを使用し定義します。今回はC#とVBで1つずつプロジェクトを作成し、アセンブリを分け、各アセンブリにはSystem.Windows.Controls.Buttonクラスを継承したカスタムコントロールを作成してあります。"XmlnsSample.VB")>上記を「AssemblyInfo.cs」又は、「AssemblyInfo.vb」に対し定義しました。各アセンブリを参照しているプロジェクトでルート要素のWindowにXML名前空間を使用し参照をしてみます。Button</custom:VBButton></StackPanel></Grid></Window>ピンクのハイライト部の通りに、XML名前空間「http://samplewpf」を定義する事により各アセンブリをXML名前空間で集約出来ている事が確認できます。このようにXML名前空間を定義し、XAMLの簡素化を行う事も出来る事がお分かり頂けましたでしょうか?今回は名前空間についてでした。