第3回 画面は「XAML」で作る(前編)連載:Windowsストア・アプリ開発入門(3/5 ページ)

» 2013年10月03日 15時14分 公開
[山本康彦(http://www.bluewatersoft.jp/),BluewaterSoft]

XML名前空間の利用

 ここまで説明してきた記法だけでは、Windowsストア・アプリ用として標準で用意されたコントロールしか使えない。例えば、独自に作成したコントロールを画面に使いたいと思ったときに、どのようなXAMLコードを書けばよいだろうか? そのコントロールの名前をXAMLコードの中に書いても、コンパイラはそれを認識できずにコンパイル・エラーになるだけだろう。

 そこでXAMLでは、XML名前空間*2の仕組みを応用して、コンパイラにコントロールなどの素性を教えるようにした。C#のソース・コードで、using句を使って名前空間を取り込むのに似た方法だ。

*2 「XML名前空間」は、XML本体の規格とは別の規格だ。資料に当たるときには注意してほしい。


 例えば、「SampleControl」という名前のコントロールを、プロジェクト内の「SampleProject.Controls」名前空間に作成したとする。このコントロールをXAMLコードで使うには、次のように書く。

<SampleControl xmlns="using:SampleProject.Controls" />

独自のコントロールを画面に表示する例(XAML)
xmlns属性にusing句を指定している。

 上のコードで「xmlns」という属性がXML名前空間の指定だ。これは、C#のusing句の変わりだと思えば分かりやすいだろう。また、一度指定したXML名前空間は、その要素の中のコンテンツにも引き継がれる。

 xmlns属性の指定には、このusing句のほかにURIを使う場合がある。例えば前回の「Hello, world!」アプリの画面定義の冒頭部分を見ると、次のようになっていた。

<Page
  ……省略……
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  ……省略……>

「Hello, world!」アプリの冒頭部分(XAML)
ここではxmlns属性にURIを指定していた。

 この「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>

XML名前空間の別名を定義して使う例(XAML)

 このように、別名の宣言は「xmlns:<別名>」で行い、利用するときは要素名か属性名の前に「<別名>:」というプレフィックスを記述する。

*3 説明しやすいので「別名」という言葉を使っているが、XML名前空間の規格書で使われている言葉ではない。


「x」名前空間と「d」名前空間

 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。