代码之家  ›  专栏  ›  技术社区  ›  bcm

itemscontrol、itemspanel和itemspresenter(Silverlight、XAML)

  •  20
  • bcm  · 技术社区  · 14 年前

    我对这三个术语完全困惑了,什么时候用哪一个?他们的关系是什么?他们是谁的孩子?

    是否正确地说这是树:

    itemsControl>项目Resenter>项目面板

    2 回复  |  直到 13 年前
        1
  •  35
  •   Mark    14 年前

    ItemsControl 概念上是一个包含项的控件。尝试简单地将此控件视为零个或多个对象的持有者。

    ItemsPresenter 有点难解释,但这是 项目控制 将定义项放置在其中的位置的模板。你的itemsControl模板可以是你喜欢的任何东西,比如一个周围有漂亮图片的网格,在这个模板中,你可以放置 项目经理 如果你想要你的物品在哪里,就在你的格子中间说。(本例取自 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 items面板可能只是一个StackPanel,其Orientation属性设置为Horizontal。

    这一切都有意义吗?

        2
  •  6
  •   mmmmmm    13 年前

    我认为这很好地解释了Silverlight是如何完成这些工作的: itemspanelTemplate类: 指定itemsPresenter为itemsControl的项布局创建的面板。 ItemsPanelTemplate Class

     <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 />
                  ....
    

    基本上,itemspepresenter(在模板中指定)将替换为itemspaneltemplate中指定的内容。

    因此,模板可以扩展为包含一个标题,并且所有子标题都将放置在此标题下:

    <Grid> <TextBlock Text="Header"/>   <ItemsPresenter /> </Grid>
    
    推荐文章