Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

XAMLは、XMLをベースとしており、XAMLの各要素からCLRオブジェクトをインスタンス化し、「要素ツリー」を構築できる。

ここでは、WPFのXAMLの書き方を通して、

を説明する。

名前空間

XAMLにおける各種の名前空間の宣言は、xmlns属性を使用したXML名前空間にて行う。
ここでは、以下の既定の名前空間の宣言を例にとって説明する。

WPF名前空間

2行目のXML名前空間の宣言(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation")では、WPFフレームワーク(PresentationFramework?.dll)のアセンブリ内に同梱されるURIにマップされたCLR名前空間(System.Windows.Controls、System.Windows.Dataなど)を、既定のXML名前空間(プレフィックスなし)として割り当てている。そのため、既定でXAMLからWPFフレームワークのCLRオブジェクトを利用できる。

XAML名前空間

3行目のXML名前空間の宣言(xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml")では、URIにマップされた共通的なXAMLの言語機能がXML名前空間(x)として割り当てられている。これにより、「x:」というプレフィックスを使用することで、「言語機能」で説明する、XAMLの言語機能を使用できるようになる。

CLR名前空間

CLR名前空間について以下を例にとって説明する。

(1)

Infragistics社製のNetAdvantage?など、XmlnsDefinition?アセンブリ属性でURIとCLR名前空間のマップが指定されたサードパーティ製のUIコンポーネントをD&DでVSデザイナから追加した場合、上記の例のように自動的にXML名前空間の宣言が追加される。

なお、XML名前空間には一意の名前を自由に付与でき(上記の例ではigDP)、このプレフィックスを使用することで、XAMLからUIコンポーネントのCLRオブジェクトを利用できる。

(2)

この他に、URIとしてCLR名前空間とアセンブリを直接指定する方法もある。

参考

言語機能

XAMLの言語機能である

について説明する。

ディレクティブ

XAMLの言語機能が提供する各種ディレクティブについて説明する。

項番ディレクティブ説明
1x:ClassXAML上から分離クラス(コードビハインド)のクラス名を定義する。
<Window x:Class="WpfApplication1.Window1"
2x:Subclassパーシャル クラスをサポートしない言語で使用する。通常は利用しない。
3x: ClassModifier?クラスのアクセスレベルを変更する。通常は利用しない。
4x:CodeXAML上にインラインコードを実装する場合に使用する。通常は利用しない。
<Grid>
  <x:Code>
    <![CDATA[
      void button1_Click(object sender, RoutedEventArgs? e) {
        button1.Content = "Hello World";
      }
    ]]>
  </x:Code>
  <Button Name="button1" Click="button1_Click">Button</Button>
</Grid>
5x:FieldModifier?プロパティのアクセスレベルを変更する。通常は利用しない。
6x:KeyXAMLで定義された各種「リソース」を識別する。下記は、x:Keyを使用して「スタイル」の「リソース」をボタンに「データ バインディング」する例。
<Window.Resources>
  <Style x:Key="buttonStyle" TargetType?="{x:Type Button}">
    <Setter Property="Background" Value="LightYellow?" />
  </Style>
</Window.Resources>
<Grid>
  <Button Style="{StaticResource? buttonStyle}">Hello Style</Button>
</Grid>
7x:NameXAMLで生成したCLRオブジェクトに名前を付与する。Name属性と差異は無い。
<Button x:Name="button1">
   Click Here
</Button>
8x:Shared静的なリソースを、取得の度に生成する場合に使用する。通常は利用しない。
※ true : 静的(全てのインスタンスは同じ)
   false : 動的(取得の度に生成する)
   既定値 : true
9x:TypeArguments?ジェネリックの型引数をコンストラクタに渡す。
(.NET Framework 4.0のXAML 2009からのサポート)
<!-- XAML 2009 -->
<ObservableCollection? x:TypeArguments?="Employee">
  <l:Employee FirstName?="John" Name="Doe" />
  <l:Employee FirstName?="Tim" Name="Smith" />
</ObservableCollection?>
10x:Uidローカライゼーションのプロセスとツールによって使用される一意識別子を指定する 。
11xml:langカルチャ情報を宣言する。
<Window x:Class="WpfApplication1.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xml:lang="ja-JP"

マークアップ拡張

XAMLの言語機能が提供する各種「マークアップ拡張」について説明する。
通常、「マークアップ拡張」は、「{」と「}」の2つの中括弧を使用することでXAMLパーサに対し、拡張されたプロパティ指定方法を指示する。

XAMLで定義されたマークアップ拡張

以下、XAMLの機能である「XAMLで定義されたマークアップ拡張」を一覧する。
これらの種類は、中括弧+「x:」プレフィックスの直後の文字列トークンによって識別される。

項番文字列トークン説明
1x:Static静的プロパティ(定数、静的プロパティ、フィールド、列挙値)を参照する。
構文:<object property="{x:Static Member=prefix:typeName.staticMemberName?}" .../>
<Button 
    Foreground="{x:Static Member=SystemColors?.InfoTextBrush?}"
    Background="{x:Static Member=SystemColors?.InfoBrush?}">
 &nbspClick Here
</Button>
2x:NullCLRオブジェクトのプロパティにnull値を設定する(既定値をnullクリアする場合など)。
<Button x:Name="button1" Background="{x:Null}" Click="button1_Click">
  Click Here
</Button>
3x:TypeCLRクラスの型情報を指定する。
詳しくは、下記、項番4の例を参照のこと。
4x:ArrayIEnumerableを持つArrayオブジェクト(配列)を生成する。
<Window.Resources>
  <x:Array x:Key="List"
    Type="{x:Type sys:String}">
    <sys:String>A</sys:String>
    <sys:String>B</sys:String>
    <sys:String>C</sys:String>
  </x:Array>
</Window.Resources>
<StackPanel?>
  <ListBox? ItemsSource?="{Binding Source={StaticResource? List}}"/>
</StackPanel?>

※ 先頭で、.NET FrameworkのSystem名前空間のインポートが必要
   xmlns:sys="clr-namespace:System;assembly=mscorlib"

※ StaticResource?については次項で説明する。

※ x:Arrayは、例外的に中括弧と共に使用しない。

WPF固有のマークアップ拡張

以下、WPF の機能である「WPF固有のマークアップ拡張」を一覧する。
こちらは、プロパティ値に「データ バインディング」や、「リソース」への参照を指定できる。

プロパティの設定方法

プロパティ属性構文

プロパティ要素構文

型コンバータ

コンテンツ構文

Contentプロパティ

Itemsプロパティ

リソース

リソースの定義

リソースの定義と参照

データ バインディング

データ バインディングの基礎

リソースとのデータ バインディング

レイアウト

レイアウトのプロパティ

パネルの種類と使い方

スタイルとテンプレート

スタイル

テンプレート

トリガ

プロパティ トリガ

データ トリガ

イベント トリガ

その他

ビルティング ブロック クラス

Applicationオブジェクト

Window画面

ナビゲーション フレームワーク

Win32ダイアログ

入力支援

メニュー・タスクバーとコマンド

ツールチップ

IME制御

デザイナ向け機能

様々なシェイプ

グラデーション

トランスフォーム処理

アニメーション

MVVMデザイン パターン

バリデーション

単項目のバリデーション

一覧のバリデーション

フォーカス制御

注意事項


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS