VisualTreeとLogicalTree

WPFで欠かせない単語(知識)が、VisualTreeLogicalTreeの2つ。
LogicalTree
 ●WPFのUIを構築するツリー構造のオブジェクト
 ●イベントが上り下りするのもこのTree。
 ●Treeの構造は静的。動的に追加・削除したりしなければ変わらない。
VisualTree
 ●LogicalTreeをより詳細に展開して、Visualなコンポーネントを全部ぶら下げたツリー構造のオブジェクト
  ただし、LogicalTreeの全要素がVisualTree内に存在するわけではない
  →System.Windows.Media.Visualか、System.Windows.Media.Visual3Dを継承したクラスのみがVisualTreeの要素となる。
 ●Treeの構造は動的。テーマ(内のテンプレート)の適用だけであっさりと構造が変わる。
 とある書籍のサンプルを参考に以下のようにXAMLを編集してみた。

<Window x:Class="TawamureDays.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">
<StackPanel>
<Label>C#と戯れる日々</Label>
<Label>Edit by チャプターマン</Label>
<Label>Since: 2012/05/14(火)</Label>
<ListBox>
<ListBoxItem>C#</ListBoxItem>
<ListBoxItem>WPF</ListBoxItem>
<ListBoxItem>その他</ListBoxItem>
</ListBox>
<Button Content="閉じる"/>
</StackPanel>
</Window>

ビュー:
サンプルView

これに対するVisualTree
VisualTree1
VisualTree2
ボタンですら、3階層以上あるぞ・・・

対するLogicalTree
LogicalTree1
LogicalTreeの方がシンプルに思える。
ただまあ、開発においては、親コントロールを探したり、子コントロールを探したりする事がよくあるので、大概VisualTreeのお世話になったりする。
VisualTreeは、System.Windows.Media.VisualTreeHelperクラスを使って走査できるし。
ある程度理解しておかないと、開発の時に悩むことになる。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m