Wpf-elements-tree
WPF-要素ツリー
プログラマーがオブジェクトを簡単に処理し、アプリケーションの動作を変更できるように、要素とコンポーネントをツリー構造で並べる多くの技術があります。 Windows Presentation Foundation(WPF)には、オブジェクト形式の包括的なツリー構造があります。 WPFでは、完全なオブジェクトツリーが概念化される2つの方法があります-
- 論理ツリー構造
- ビジュアルツリー構造
これらのツリー構造を使用すると、UI要素間の関係を簡単に作成および識別できます。 ほとんどの場合、WPFの開発者と設計者は、手続き型言語を使用してアプリケーションを作成するか、オブジェクトツリー構造を念頭に置いてXAMLでアプリケーションのUI部分を設計します。
論理ツリー構造
WPFアプリケーションでは、XAMLのUI要素の構造は論理ツリー構造を表します。 XAMLでは、UIの基本要素は開発者によって宣言されます。 WPFの論理ツリーは次を定義します-
- 依存関係プロパティ
- 静的および動的リソース
- 名前などに要素をバインドする
ボタンとリストボックスが作成される次の例を見てみましょう。
<Window x:Class = "WPFElementsTree.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" Height = "30" Width = "70" Content = "OK" Margin = "20"/>
<ListBox x:Name = "listBox" Height = "100" Width = "100" Margin = "20">
<ListBoxItem Content = "Item 1"/>
<ListBoxItem Content = "Item 2"/>
<ListBoxItem Content = "Item 3"/>
</ListBox>
</StackPanel>
</Window>
XAMLコードを見ると、ツリー構造、つまり ルートノードはウィンドウであり、ルートノード内には子が1つだけあります。それはStackPanelです。 ただし、StackPanelには、ボタンとリストボックスという2つの子要素が含まれています。 リストボックスには、さらに3つの子リストボックス項目があります。
ビジュアルツリー構造
WPFでは、ビジュアルツリーの概念は、ビジュアルベースクラスによって表されるビジュアルオブジェクトの構造を記述します。 出力画面にレンダリングされるすべてのUI要素を示します。
プログラマが特定のコントロール用のテンプレートを作成する場合、実際にはそのコントロールのビジュアルツリーをレンダリングしています。 ビジュアルツリーは、パフォーマンスと最適化の理由で低レベルのコントロールを描画する場合にも非常に便利です。
WPFアプリケーションでは、視覚的なツリーが使用されます-
- ビジュアルオブジェクトのレンダリング。
- レイアウトのレンダリング。
- ルーティングされたイベントは、主に論理ツリーではなく視覚ツリーに沿って移動します。
ボタンとリストボックスを含む上記の簡単なアプリケーションのビジュアルツリーを表示するには、XAMLコードをコンパイルして実行します。次のウィンドウが表示されます。
アプリケーションの実行中は、以下に示すように、実行中のアプリケーションのビジュアルツリーがLive Visual Treeウィンドウに表示され、このアプリケーションの完全な階層が表示されます。
通常、ビジュアルツリーは論理ツリーのスーパーセットです。 ここでは、すべての論理要素もビジュアルツリーに存在していることがわかります。 したがって、これら2つのツリーは、UIを構成するオブジェクトの同じセットの2つの異なるビューにすぎません。
- 論理ツリーには多くの詳細が含まれていないため、ユーザーインターフェースのコア構造に集中し、表示方法の詳細を無視できます。
- 論理ツリーは、ユーザーインターフェイスの基本構造を作成するために使用するものです。
- ビジュアルツリーは、プレゼンテーションに焦点を合わせている場合に役立ちます。 たとえば、UI要素の外観をカスタマイズする場合は、ビジュアルツリーを使用する必要があります。