web-dev-qa-db-ja.com

ItemsControl、ItemsPanel、ItemsPresenter(Silverlight、XAML)

私はこれらの3つの用語に完全に混乱していますが、いつ使用するのですか?関係は何ですか、そして彼らはどのコントロールの子供ですか?

これが木であると言うのは正しいですか:

ItemsControl> ItemsPresenter> ItemsPanel

20
bcm

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プロパティがHorizo​​ntalに設定されたStackPanelにすることができます。

これはすべて理にかなっていますか?

35
Mark

これは、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>
6
mmmmmm