我试图将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;在项目内容周围,无论项目的内容是否被模板化?
答案 0 :(得分:2)
ItemContainerStyle
&#39;包装&#39;对于任何事情......它是Style
。您可以设置项容器和 Style
属性的ItemTemplate
,但是您的问题是由于您尝试设置{您ContentTemplate
中ContentPresenter
的{1}}属性,Style
会覆盖此值{1}}。 (请参阅评论部分中的@ Clemens&#39;链接。)
解决此问题的一种方法是使用ItemTemplate
将ListBox
中的数据项包装起来,并为ListBoxItem
属性而不是Template
提供值}。 (您当然可以添加ContentTemplate
以删除它的边框,使其看起来像Style
)。在这种情况下,ItemsControl
会影响ItemContainerStyle
。但是,您必须了解其中的差异。
ListBoxItem
将影响ItemContainerStyle
,而ListBoxItem
则用于定义内部的数据对象。因此,在ItemTemplate
中定义Border
并定义数据在ItemContainerStyle
中的显示方式是合适的。试试这个:
ItemTemplate