当列包含某些单词时,我想更改 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>
我知道如何在某些值匹配时更改颜色,如下所示。
如何更改前景色不仅相同,而且还包括值。
(喜欢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>