ここまで説明してきた記法だけでは、Windowsストア・アプリ用として標準で用意されたコントロールしか使えない。例えば、独自に作成したコントロールを画面に使いたいと思ったときに、どのようなXAMLコードを書けばよいだろうか? そのコントロールの名前をXAMLコードの中に書いても、コンパイラはそれを認識できずにコンパイル・エラーになるだけだろう。
そこでXAMLでは、XML名前空間*2の仕組みを応用して、コンパイラにコントロールなどの素性を教えるようにした。C#のソース・コードで、using句を使って名前空間を取り込むのに似た方法だ。
例えば、「SampleControl」という名前のコントロールを、プロジェクト内の「SampleProject.Controls」名前空間に作成したとする。このコントロールをXAMLコードで使うには、次のように書く。
<SampleControl xmlns="using:SampleProject.Controls" />
上のコードで「xmlns」という属性がXML名前空間の指定だ。これは、C#のusing句の変わりだと思えば分かりやすいだろう。また、一度指定したXML名前空間は、その要素の中のコンテンツにも引き継がれる。
xmlns属性の指定には、このusing句のほかにURIを使う場合がある。例えば前回の「Hello, world!」アプリの画面定義の冒頭部分を見ると、次のようになっていた。
<Page
……省略……
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
……省略……>
この「http://schemas.microsoft.com/……」というURIは、コンパイラに対する単なる目印だと思ってほしい。この例では、この<Page>要素(および、そのコンテンツ)はXAMLコードであるというだけの意味しかない。そのURIの場所から実際に何かをダウンロードしてきて使うわけではないのだ。
さて、先ほどのSampleControlコントロールの例に戻る。XAMLコード内に<SampleControl>要素を書くたびに「xmls=……」と書くのは、いかにも面倒だ。そこで、XML名前空間の別名*3記法がある。これを名前空間プレフィックスという。名前空間プレフィックスは、定義した要素とそのコンテンツで利用できる。
例えば、<Page>要素内で「using:SampleProject.Controls」という名前空間の別名として「myControls」という名前空間プレフィックスを定義して使うと、次のように書ける。
<Page
xmlns:myControls="using:SampleProject.Controls"
……省略……>
<myControls:SampleControl />
</Page>
このように、別名の宣言は「xmlns:<別名>」で行い、利用するときは要素名か属性名の前に「<別名>:」というプレフィックスを記述する。
*3 説明しやすいので「別名」という言葉を使っているが、XML名前空間の規格書で使われている言葉ではない。
Visual Studio 2013が自動生成するページのXAMLコードには、特徴的な2つの名前空間がある。その別名は「x」と「d」だ。
「x」プレフィックス付きの要素や属性のうち、覚えておくべき主なものを次の表に挙げる。詳しくはMSDNの「XAML名前空間 (x:) の言語機能」を参照してほしい。
要素または属性 | 意味 |
---|---|
x:Class属性 | C#コードの部分クラスと結合する |
x:Key属性 | リソースを識別する |
x:Name属性 | C#コードからこのコントロールを識別する。C#のコードからは、このコントロールを参照している変数名に見える。 なお、「x:」プリフィックスが付かないName属性は、そのコントロールのNameプロパティである。注意してほしい |
x:Uid属性 | このコントロールを識別する一意識別子。ローカライズした文字列を割り当てるときに利用する |
x:Null | C#のnullに相当 |
「x」XML名前空間の主なもの |
「d」プレフィックスは、Visual Studio 2013でのデザイン時のみ機能し、実行時には無視される。例えば、実行時とは異なるデータをデザイン時に表示させるために使う。
Copyright© Digital Advantage Corp. All Rights Reserved.