我对这三个术语完全感到困惑,什么时候使用?关系是什么,他们是哪些控制的孩子?

说这是树是正确的:

itemscontrol> itempresenter> itemspanel

有帮助吗?

解决方案

ItemsControl 从概念上讲是一个容纳物品的控制。尝试简单地将此控件视为零或更多对象的持有人。

ItemsPresenter 解释有点困难,但这是 ItemsControl 将定义物品放置在其中的模板。您的物品Scontrol的模板可以是您喜欢的任何东西,说一个带有一些漂亮图片的网格,在此模板内,您将放置 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的项目以水平方式显示,那么您的项目面板可以简单地是一个带有其方向属性的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 />
              ....

基本上,将用ItemSpanelTemplate中指定的内容替换ItemPresenter(在模板中指定)。

因此,可以将模板扩展到包括标头,所有孩子都将放在此标题下:

<Grid> <TextBlock Text="Header"/>   <ItemsPresenter /> </Grid>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top