当列包含某些单词时,我想更改 WPF ListView 中的颜色

I want to change the color in a WPF ListView when column contains certain words

我知道如何在某些值匹配时更改颜色,如下所示。

如何更改前景色不仅相同,而且还包括值。

(喜欢String.Contain(Value)

<GridViewColumn Header="Permission" Width="170" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding permission}">
                <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding permission}" Value="Pass">
                                <Setter Property="Foreground" Value="#4c72cc"/>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding permission}" Value="Fail">
                                <Setter Property="Foreground" Value="#ef6eab"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBlock.Style>
            </TextBlock>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

您可以为此使用值转换器 (IValueConverter) 并将颜色直接绑定到 "permission" 并转换为颜色

有两种方法可以实现:

方法一

定义两个转换器来检查您的字符串是否包含 "Pass"/"Fail" 值:

public class PassConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value as string)?.Contains("Pass");            
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
public class FailConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value as string)?.Contains("Fail");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

将转换器添加到您的静态资源:

<Window.Resources>
    <YourNameSpace:PassConverter x:Key="PassConverter"></local:PassConverter>
    <YourNameSpace:FailConverter x:Key="FailConverter"></local:FailConverter>
</Window.Resources>

并更新您的触发器以使用它们:

<GridViewColumn Header="Permission" Width="170" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Permission}">
                                <TextBlock.Style>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=permission, Converter={StaticResource PassConverter}}">
                                                <DataTrigger.Value>True</DataTrigger.Value>
                                                <Setter Property="Foreground" Value="#4c72cc"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding permission,Converter={StaticResource FailConverter}}" >
                                                <DataTrigger.Value>True</DataTrigger.Value>
                                                <Setter Property="Foreground" Value="#ef6eab"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

方法二

您也可以使用单个 MultiValueConverter 并传递带有 permission 值的 "Pass" 或 "Fail" 字符串并像这样检查:

<GridViewColumn Header="Permission" Width="170" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Permission}">
                                <TextBlock.Style>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Style.Triggers>
                                            <DataTrigger>
                                                <DataTrigger.Binding>
                                                    <MultiBinding Converter="{StaticResource PassFailConverter}">
                                                        <Binding Path="permission"/>
                                                        <Binding>
                                                            <Binding.Source>
                                                                <system:String>
                                                                    Pass
                                                                </system:String>
                                                            </Binding.Source>
                                                        </Binding>
                                                    </MultiBinding>
                                                </DataTrigger.Binding>
                                                <DataTrigger.Value>True</DataTrigger.Value>
                                                <Setter Property="Foreground" Value="#4c72cc"/>
                                            </DataTrigger>
                                            <DataTrigger>
                                                <DataTrigger.Binding>
                                                    <MultiBinding Converter="{StaticResource PassFailConverter}">
                                                        <Binding Path="permission"/>
                                                        <Binding>
                                                            <Binding.Source>
                                                                <system:String>
                                                                    Fail
                                                                </system:String>
                                                            </Binding.Source>
                                                        </Binding>
                                                    </MultiBinding>
                                                </DataTrigger.Binding>
                                                <DataTrigger.Value>True</DataTrigger.Value>
                                                <Setter Property="Foreground" Value="#ef6eab"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

multivalueconverter 应该是这样的:

 public class PassFailConverter:IMultiValueConverter {
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return (values[0] as string).Contains(values[1] as string);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

不要忘记在静态资源中包含转换器:

<YourNameSpace:PassFailConverter x:Key="PassFailConverter"></local:PassFailConverter>