不能一起使用ItemTemplate和ItemContainerStyle吗?

时间:2015-03-11 13:07:26

标签: wpf

我试图将ItemTemplate和ItemContainerStyle同时应用于ItemsControl: -

<ItemsControl ItemsSource="{Binding LogEntries}"
              ItemTemplate="{StaticResource itemTemplate}"
              ItemContainerStyle="{StaticResource itemContainer}" />

然而,ItemContainerStyle似乎被忽略了(但是如果我删除了ItemTemplate它确实有效。)

项目模板相当复杂,可用于许多不同的视图。在一个特定的视图中,我需要更改列表项的间距和背景颜色,因此我也尝试应用ItemContainerStyle,如下所示: -

<Style x:Key="itemContainer"
       TargetType="ContentPresenter">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border x:Name="itemBorder"
                        Margin="4,0,4,4"
                        Background="#666666">
                    <ContentPresenter Content="{Binding}" />
                </Border>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

我有点惊讶你不能同时申请,除非我遗漏了什么?我假设ItemContainerStyle实际上只是一个&#34;包装器&#34;在项目内容周围,无论项目的内容是否被模板化?

1 个答案:

答案 0 :(得分:2)

ItemContainerStyle &#39;包装&#39;对于任何事情......它是Style。您可以设置项容器 Style属性的ItemTemplate,但是您的问题是由于您尝试设置{您ContentTemplateContentPresenter的{​​1}}属性,Style会覆盖此值{1}}。 (请参阅评论部分中的@ Clemens&#39;链接。)

解决此问题的一种方法是使用ItemTemplateListBox中的数据项包装起来,并为ListBoxItem属性而不是Template提供值}。 (您当然可以添加ContentTemplate以删除它的边框,使其看起来像Style)。在这种情况下,ItemsControl会影响ItemContainerStyle。但是,您必须了解其中的差异。

ListBoxItem将影响ItemContainerStyle,而ListBoxItem则用于定义内部的数据对象。因此,在ItemTemplate中定义Border并定义数据在ItemContainerStyle中的显示方式是合适的。试试这个:

ItemTemplate