XAML Datagrid 设置 rowStyle 如果值大于
XAML Datagrid set rowStyle if Value greater than
我有一个包含 3 列的数据网格。
现在我想有条件地更改行的突出显示。
比如:如果第 2 列中的值大于 XX,则将行颜色更改为红色。
我已经尝试过,但没有成功:
<DataGrid Name="DataGrid1" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" AlternatingRowBackground="LightGray" ItemsSource="{Binding}" AutoGenerateColumns="False" FontSize="18" CanUserResizeColumns="False" CanUserReorderColumns="False" CanUserSortColumns="False" CanUserAddRows="False">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Steckzyklen}" Value="< 20">
<Setter Property="Background" Value="#FFFF4848"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Steckplatz" Binding="{Binding Name}" Width="200"/>
<DataGridTextColumn Header="Steckzyklen" Binding="{Binding Steckzyklen}" Width="200"/>
<DataGridTextColumn Header="Austauschdatum" Binding="{Binding Austauschdatum}" Width="200"/>
</DataGrid.Columns>
</DataGrid>
在这一行中:DataTrigger Binding="{Binding Steckzyklen}" Value="< 20"
我尝试用 < 来做,但没有成功。
有人知道如何让它工作吗?最好只更改 XAML.
中的内容
提前致谢!
您可以按如下方式更改样式:
创建一个新的转换器:
public class IsEqualOrLessThanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int intValue = (int)value;
int compareToValue = Int32.Parse(parameter.ToString() ?? string.Empty);
return intValue <= compareToValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后:
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Steckzyklen, Converter={StaticResource IsEqualOrLessThanConverter}, ConverterParameter=20}" Value="True">
<Setter Property="Foreground" Value="#FFFF4848"/>
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>
我有一个包含 3 列的数据网格。
现在我想有条件地更改行的突出显示。 比如:如果第 2 列中的值大于 XX,则将行颜色更改为红色。
我已经尝试过,但没有成功:
<DataGrid Name="DataGrid1" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3" AlternatingRowBackground="LightGray" ItemsSource="{Binding}" AutoGenerateColumns="False" FontSize="18" CanUserResizeColumns="False" CanUserReorderColumns="False" CanUserSortColumns="False" CanUserAddRows="False">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Steckzyklen}" Value="< 20">
<Setter Property="Background" Value="#FFFF4848"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Steckplatz" Binding="{Binding Name}" Width="200"/>
<DataGridTextColumn Header="Steckzyklen" Binding="{Binding Steckzyklen}" Width="200"/>
<DataGridTextColumn Header="Austauschdatum" Binding="{Binding Austauschdatum}" Width="200"/>
</DataGrid.Columns>
</DataGrid>
在这一行中:DataTrigger Binding="{Binding Steckzyklen}" Value="< 20" 我尝试用 < 来做,但没有成功。
有人知道如何让它工作吗?最好只更改 XAML.
中的内容提前致谢!
您可以按如下方式更改样式:
创建一个新的转换器:
public class IsEqualOrLessThanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int intValue = (int)value;
int compareToValue = Int32.Parse(parameter.ToString() ?? string.Empty);
return intValue <= compareToValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后:
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Steckzyklen, Converter={StaticResource IsEqualOrLessThanConverter}, ConverterParameter=20}" Value="True">
<Setter Property="Foreground" Value="#FFFF4848"/>
<Setter Property="Background" Value="Yellow"/>
</DataTrigger>
</Style.Triggers>
</Style>