WPF-XAMLの概要
WPFの操作中に最初に遭遇するものの1つは、XAMLです。XAMLはExtensibleApplication MarkupLanguageの略です。これは、XMLに基づく単純で宣言型の言語です。
XAMLでは、階層関係を持つオブジェクトのプロパティを作成、初期化、および設定するのは非常に簡単です。
これは主にGUIの設計に使用されますが、Workflow Foundationでワークフローを宣言するなど、他の目的にも使用できます。
基本構文
新しいWPFプロジェクトを作成すると、以下に示すように、MainWindow.xamlにデフォルトでいくつかのXAMLコードが表示されます。
<Window x:Class = "Resources.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "525">
<Grid>
</Grid>
</Window>
上記のXAMLファイルには、さまざまな種類の情報が含まれています。次の表は、各情報の役割を簡単に説明しています。
情報 | 説明 |
---|---|
<ウィンドウ | これは、ルートの開始オブジェクト要素またはコンテナです。 |
x:Class = "Resources.MainWindow" | これは、マークアップを背後で定義された部分クラスコードに接続する部分クラス宣言です。 |
xmlns = "http://schemas.microsoft.com/win fx / 2006 / xaml / presentation" | WPFクライアント/フレームワークのデフォルトのXAML名前空間をマップします |
xmlns:x = "http://schemas.microsoft.com/w infx / 2006 / xaml" | xにマップするXAML言語のXAML名前空間:プレフィックス |
>> | ルートのオブジェクト要素の終わり |
<グリッド> </グリッド> |
空のグリッドオブジェクトのタグを開始および終了しています。 |
</ウィンドウ> | オブジェクト要素を閉じる |
XAMLの構文規則は、XMLとほぼ同じです。XAMLドキュメントを見ると、実際には有効なXMLファイルであることがわかりますが、XMLファイルは必ずしもXAMLファイルである必要はありません。これは、XMLでは属性の値が文字列である必要があるのに対し、XAMLではプロパティ要素構文と呼ばれる別のオブジェクトである可能性があるためです。
Object要素の構文は、左山括弧(<)で始まり、その後にオブジェクトの名前が続きます(例:Button)。
そのオブジェクト要素のいくつかのプロパティと属性を定義します。
Object要素は、スラッシュ(/)の直後に直角ブラケット(>)を付けて閉じる必要があります。
子要素のない単純なオブジェクトの例
<Button/>
いくつかの属性を持つオブジェクト要素の例
<Button Content = "Click Me" Height = "30" Width = "60" />
代替構文の例はプロパティを定義します(プロパティ要素構文)
<Button>
<Button.Content>Click Me</Button.Content>
<Button.Height>30</Button.Height>
<Button.Width>60</Button.Width>
</Button>
子要素を持つオブジェクトの例:StackPanelには子要素としてTextblockが含まれています
<StackPanel Orientation = "Horizontal">
<TextBlock Text = "Hello"/>
</StackPanel>
WPFでXAMLを使用する理由
XAMLは、WPFの最も広く知られている機能であるだけでなく、最も誤解されている機能の1つでもあります。WPFに触れている場合は、XAMLについて聞いたことがあるはずです。ただし、XAMLに関する次の2つのあまり知られていない事実に注意してください-
- WPFはXAMLを必要としません
- XAMLはWPFを必要としません
実際、これらは分離可能なテクノロジーです。それがどのようになり得るかを理解するために、XAMLのいくつかのプロパティを使用してボタンが作成される簡単な例を見てみましょう。
<Window x:Class = "WPFXAMLOverview.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<StackPanel>
<Button x:Name = "button" Content = "Click Me" HorizontalAlignment = "Left"
Margin = "150" VerticalAlignment = "Top" Width = "75" />
</StackPanel>
</Window>
WPFでXAMLを使用しないことを選択した場合は、手続き型言語でも同じGUI結果を得ることができます。同じ例を見てみましょうが、今回はC#でボタンを作成します。
using System.Windows;
using System.Windows.Controls;
namespace WPFXAMLOverview {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
// Create the StackPanel
StackPanel stackPanel = new StackPanel();
this.Content = stackPanel;
// Create the Button
Button button = new Button();
button.Content = "Click Me";
button.HorizontalAlignment = HorizontalAlignment.Left;
button.Margin = new Thickness(150);
button.VerticalAlignment = VerticalAlignment.Top;
button.Width = 75;
stackPanel.Children.Add(button);
}
}
}
XAMLコードまたはC#コードのいずれかをコンパイルして実行すると、以下に示すのと同じ出力が表示されます。
上記の例から、オブジェクトのプロパティを作成、初期化、および設定するためにXAMLで実行できることは、コードを使用して同じタスクを実行できることは明らかです。
XAMLは、UI要素を設計するためのもう1つのシンプルで簡単な方法です。
XAMLでは、UI要素を設計するためにできることが唯一の方法であるという意味ではありません。XAMLでオブジェクトを宣言するか、コードを使用してオブジェクトを定義できます。
XAMLはオプションですが、それにもかかわらず、XAMLはWPF設計の中心です。
XAMLの目標は、ビジュアルデザイナーがユーザーインターフェイス要素を直接作成できるようにすることです。
WPFは、マークアップからユーザーインターフェイスのすべての視覚的側面を制御できるようにすることを目的としています。