私はこれらの3つの用語に完全に混乱していますが、いつどちらを使用するのですか?関係は何ですか、そして彼らはどのコントロールの子供ですか?
これが木であると言うのは正しいですか:
ItemsControl> ItemsPresenter> ItemsPanel
私はこれらの3つの用語に完全に混乱していますが、いつどちらを使用するのですか?関係は何ですか、そして彼らはどのコントロールの子供ですか?
これが木であると言うのは正しいですか:
ItemsControl> ItemsPresenter> ItemsPanel
ItemsControl
概念的には、アイテムを格納するコントロールです。このコントロールを、0個以上のオブジェクトのホルダーと単純に考えてみてください。
ItemsPresenter
説明するのは少し難しいですが、これはItemsControl
アイテムがその中のどこに配置されるかを定義するテンプレートの一部です。ItemsControlのテンプレートは、好きなものにすることができます。たとえば、グリッドの周りにきれいな画像を配置します。このテンプレート内で、ItemsPresenter
アイテムを配置したい場所、たとえばグリッドの真ん中に配置します。(この例はmsdnから取得され、読みやすくするために簡略化されています)
<Style TargetType="HeaderedItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedItemsControl}">
<Grid>
<Rectangle Stroke="Black" Fill="Red"/>
<ItemsPresenter Margin="2,0,0,0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
これItemsPanel
は、ItemsControl内のアイテムのレイアウトを制御するパネル(またはコンテナー)です。したがって、ItemsControlに追加したアイテムを水平方向に表示する場合は、アイテムパネルをOrientationプロパティがHorizontalに設定されたStackPanelにすることができます。
これはすべて理にかなっていますか?
これは、Silverlightによって処理がどのように行われるかをほぼ説明していると思います。ItemsPanelTemplateクラス:ItemsPresenter がItemsControlのアイテムのレイアウト用に作成するパネルを指定します。 ItemsPanelTemplateクラス
<Style TargetType="local:myItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:myItemsControl">
....
<ItemsPresenter />
....
基本的に、ItemPresenter(テンプレートで指定)は、ItemsPanelTemplateで指定されているものに置き換えられます。
したがって、テンプレートを拡張してヘッダーを含めることができ、すべての子がこのヘッダーの下に配置されます。
<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid>