样式资源取决于字符串变量



我需要项控件中项的样式依赖于该项的字符串变量。因此,如果字符串是"A",则该项应具有样式1。如果它是"B",则应具有样式2,依此类推

我一直在四处寻找,但真的找不到一个直接的方法来做这件事,所以我现在没有代码可以显示。我想也许我不知道我应该搜索的概念的名称。

所以问题是:在WPF中有没有一种直接的典型方法来做到这一点?

DataTriggers应该这样做。不是ItemsControl,但应该是类似的

更新:使用DataTriggers 的ItemsControl

<ListBox ....> 
<ListBox.ItemContainerStyle> 
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Gender}" Value="Male">
<Setter Property="Background" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Gender}" Value="Female">
<Setter Property="Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle> 
</ListBox>

您可以使用DataTemplateSelector:

public class TemplateSelector : DataTemplateSelector
{
public DataTemplate TemplateA { get; set; }
public DataTemplate TemplateB { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
YourClass dataObj = item as YourClass;
if (dataObj != null)
{
switch (dataObj.TheStringProperty)
{
case "A":
return TemplateA;
case "B":
return TemplateA;
}
}
return base.SelectTemplate(item, container);
}
}

XAML:

<ItemsControl>
<ItemsControl.Resources>
<DataTemplate x:Key="a">
<TextBlock>I am an A...</TextBlock>
</DataTemplate>
<DataTemplate x:Key="b">
<TextBlock>I am a B...</TextBlock>
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemTemplateSelector>
<local:TemplateSelector TemplateA="{StaticResource a}" TemplateB="{StaticResource b}" />
</ItemsControl.ItemTemplateSelector>
</ItemsControl>

最新更新