每行设置XAML Datagrid文本颜色

时间:2011-02-22 14:29:18

标签: c# wpf xaml datagrid

我正在尝试在XAML中为数据网格添加验证。

目前,我创建了一个方法,它检查3个文本框是否有效输入,如果为false,则将数据网格绑定的集合中的值设置为true或false。这部分工作正常。

我现在遇到的问题是让它真正起作用。

我创建了一个转换器:

 public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
     bool isRowValid = ((bool)value);

     ConsoleColor validColour = ConsoleColor.Green;
     ConsoleColor invalidColour = ConsoleColor.Red;

     if (isRowValid)
     {
        return validColour;
     }
     else
     {
        return invalidColour;
     }
  }

因此,当行无效时,它将显示红色,当有效时,它将显示绿色。

当行失去焦点时,将调用验证每一行的方法,默认情况下,每行都设置为无效。

我一直试图通过

为每一行设置背景
<DataGrid.RowBackground>
    <SolidColorBrush Color="{Binding Path=IsRowValid, Converter={StaticResource RowValidConverter}}" />
</DataGrid.RowBackground>

但理想情况下,我希望这只能调整文字颜色,而不是背景。

非常感谢任何关于如何实现这一点的建议,

感谢。

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,那么我认为更简单的方法是在RowStyle中添加Validation.HasError的触发器

<DataGrid ...>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="TextElement.Foreground" Value="Green"/>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="TextElement.Foreground" Value="Red"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <!--...-->
</DataGrid>

或者,如果您在ViewModel中使用名为IsRowValid的属性以其他方式控制此操作,则可以将触发器更改为DataTrigger

<DataTrigger Binding="{Binding IsRowValid}" Value="True">
    <Setter Property="TextElement.Foreground" Value="Red"/>
</DataTrigger>