22

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

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

ItemsControl> ItemsPresenter> ItemsPanel

4

2 に答える 2

38

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にすることができます。

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

于 2010-09-16T10:51:32.240 に答える
6

これは、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>
于 2011-06-09T11:01:35.593 に答える