gpt4 book ai didi

wpf - ItemTemplate 和 ItemContainerStyle 不能一起使用吗?

转载 作者:行者123 更新时间:2023-12-03 16:44:08 26 4
gpt4 key购买 nike

我正在尝试将 ItemTemplate 和 ItemContainerStyle 应用于 ItemsControl:-

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

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

项目模板相当复杂,用于许多不同的 View 。在一个特定 View 中,我需要更改列表项的间距和背景颜色,因此我还尝试应用 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 实际上只是项目内容的“包装器”,无论项目的内容是否模板化?

最佳答案

ItemContainerStyle不是任何东西的“包装器”...它是 Style .您可以同时设置 Style项目容器和 ItemTemplate属性,但您的问题是因为您试图设置 ContentTemplate ContentPresenter 的属性(property)在您的 Style这被 ItemTemplate 的值覆盖. (请参阅评论部分中的@Clemens 链接)。

解决此问题的一种方法是使用 ListBox将其数据项包装在 ListBoxItem 中s 并为 Template 提供一个值属性而不是 ContentTemplate . (你当然可以添加一个 Style 来移除它的边框,使它看起来像一个 ItemsControl )。在这种情况下,ItemContainerStyle会影响ListBoxItem反而。但是,您必须了解其中的区别。
ItemContainerStyle会影响ListBoxItem ,而 ItemTemplate用于定义里面的数据对象。因此,定义一个 Border 是合适的。在 ItemContainerStyle并定义数据在 ItemTemplate 中的外观.尝试这个:

<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Margin="4,0,4,4" Background="#666666">
<ContentPresenter Content="{Binding}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

关于wpf - ItemTemplate 和 ItemContainerStyle 不能一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28987424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com