今回は添付プロパティについてです。
WPFで提供されているレイアウト用コントロールを見る前に、添付プロパティについて知る必要がある為、レイアウト用コントロールを解説する前に添付プロパティについて見ていきたいと思います。
また、添付プロパティを知る上で依存関係プロパティを理解している必要がありますが、今回は入門編として添付プロパティの使用方法を得る事を目的としている為、依存関係プロパティの詳細についてはまた別の機会に取り上げたいと思います。
それではMSDNでの添付プロパティの説明を見てみたいと思います。
添付プロパティとは、Extensible Application Markup Language (XAML) によって定義される概念です。添付プロパティの目的は、任意のオブジェクトに対して設定可能な一種のグローバル プロパティとして使用することです。Windows Presentation Foundation (WPF) では一般に、添付プロパティは、従来のプロパティ "ラッパー" を持たない特殊な形式の依存関係プロパティとして定義されます。
また添付プロパティを使用する理由としてこのようにも説明されています。
添付プロパティの目的の 1 つは、実際には親要素で定義されるプロパティについて、子要素がそれぞれ別の値を指定できるようにすることです。たとえば、子要素をユーザー インターフェイス (UI) にどのように表示するかを子要素から親要素に通知させるという状況に応用されます。
上記説明をまずは簡単なWindowを用いて見てみます。
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<DockPanel>
<Button DockPanel.Dock="Top" />
</DockPanel>
</Window>
上記ピンクでハイライトされている部分が添付プロパティを使用している部分です。
具体的にはDockPanelクラスの「Dock」添付プロパティにButtonクラスが「Top」として設定している事になります。
これは説明の通りにButtonクラスが親要素のDockPanelに対し「DockPanel.Dock="Top"」として通知している事になります。
この子要素から親要素への通知がある場合、WPFのレイアウトシステムは「Panel独自のロジック」を適用する事となりレイアウト時の計算・描画に反映するといった仕組みになります。
また
System.Windows.Controls.Gridコントロールの例を見てみましょう。
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid ShowGridLines="True" >
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0">左上</Button>
<Button Grid.Row="1" Grid.Column="1">中央</Button>
<Button Grid.Row="2" Grid.Column="2">右下</Button>
</Grid>
</Window>
上記Gridの例では、Gridコントロールの子要素の3つのButtonが添付プロパティを使用して親のGridに対し配置場所を指定しています。
添付プロパティの通知により親要素のGridは、1つ目のButtonは「0列目の0行目」であり、2つ目のButtonは「1列目の1行目」であり、3つ目のButtonは「2列目の2行目」と認識し、レイアウトシステムのPanel独自のロジックを適用させます。
このようにして、WPFでのレイアウトでは添付プロパティを使用しレイアウトを定義する事が多々ありますので、添付プロパティの使用方法を理解する事はとても重要になります。
今後また別の機会に、独自の添付プロパティの作成方法なども取り上げていきたいと思います。
今回は添付プロパティの使用方法についてでした。
to be continue・・・