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

时间:2018-08-05 17:33:53

标签: .net wpf

我需要item控件中项目的样式取决于项目的字符串变量。因此,如果字符串为“ A”,则该项目应具有样式1;如果字符串为“ B”,则其应具有样式2,依此类推。

我一直在环顾四周,但无法真正找到实现此目的的直接方法,因此目前没有代码可显示。我想也许我不知道我应该搜索的概念的名称。

所以问题是:在WPF中是否有简单直接的典型方法?

2 个答案:

答案 0 :(得分:0)

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

更新:ItemsControl with DataTriggers

<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>

答案 1 :(得分:0)

您可以使用Spark to process rdd chunk by chunk from json files and post to Kafka topic

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>