我有一个带有集合的列表框
ObservableCollection<BaseObject> _baseObjects;
public ObservableCollection<BattlegroundBaseObject> BaseObject
{
get { return _baseObjects?? (_baseObjects= new ObservableCollection<BaseObject>()); }
}
该集合有两个与BaseObject不同的子节点。一个是另一个图像的路径..更多即将到来
我现在需要基于孩子们的两个不同的ItemContainerStyles
<ListBox.ItemContainerStyle>
<Style BasedOn="ListBoxItem" TargetType="ListBoxItem" x:Name="ListBoxPathLineStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Path Stroke="{Binding ObjectColor}" Data="{Binding PathGeometryData}" />
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- Alternative Template for other type -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Image Source="howTheHellCares.png"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
目前总是选择较低的二传手,但我需要区别对待...某人知道怎么做?
答案 0 :(得分:5)
您似乎对ItemContainerStyle
有错误的想法......名称中的线索...... 容器的Style
,而不是对于内容。我的意思是它Style
是ListBoxItem
而不是项目中包含的数据......字面意思是项目的容器。
您真正想要的是DataTemplate
可以为ItemTemplate
属性指定的DataTemplate
。 DataType
具有DataTemplate
属性,以便您可以利用相关类的属性。您可以使用DataTemplateSelector
在每个项目的DataTemplate
之间切换,但还有另一种方式。
您可以为您拥有的每种数据类型指定x:Key
,但不会为其提供<DataTemplate DataType="{x:Type YourXmlNamespacePrefix:SomeDataType}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type YourXmlNamespacePrefix:SomeOtherDataType}">
...
</DataTemplate>
值。这样,WPF会自动将它们应用于它找到的没有明确设置的任何相关数据类型对象。
ItemContainerStyle
您可以将{{1}}留空,也可以定义每个项目的容器外观,无论其类型如何。
答案 1 :(得分:0)
<ListBox.ItemContainerStyle>
<Style BasedOn="ListBoxItem" TargetType="ListBoxItem" x:Name="ListBoxPathLineStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Path Stroke="{Binding ObjectColor}" Data="{Binding PathGeometryData}" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding={Binding Path=., Converter={StaticResource MyTypeToTemplaceConverter}} Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Image Source="howTheHellCares.png"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>