ItemsControl、ItemsPanel、ItemsPresenter(Silverlight、XAML)
-
03-10-2019 - |
質問
私はこれらの3つの用語でまったく混乱しています、いつ使用するか?関係は何ですか、そして彼らはそのコントロールの子供ですか?
これが木だと言うのは正しいですか:
itemcontrol> itemspresenter> itemspanel
解決
ItemsControl
概念的にはアイテムを収容するコントロールです。このコントロールを、ゼロ以上のオブジェクトのホルダーとして単に考えるようにしてください。
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
アイテムコントロールのアイテムのレイアウトを制御するパネル(またはコンテナ)です。したがって、アイテムコントロールに追加されたアイテムが水平方向の方法で表示されるようにしたい場合は、YORアイテムパネルは、その方向プロパティが水平に設定されたスタックパネルになる可能性があります。
これはすべて理にかなっていますか?
他のヒント
これは、シルバーライトによって物事がどのように行われるかをほとんど説明していると思います:itempaneltemplateクラス:Itemspresenterが作成するパネルを指定します。アイテムコントロールのアイテムのレイアウトを指定します。 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(テンプレートで指定)は、itempaneltemplateで指定されているものに置き換えられます。
したがって、テンプレートを拡張してヘッダーを含めることができ、すべての子供はこのヘッダーの下に配置されます。
<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid>