【问题标题】:Setting XAML Datagrid Text colour per row设置每行 XAML Datagrid 文本颜色
【发布时间】:2011-02-22 14:29:18
【问题描述】:

我正在尝试向 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>

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

任何有关如何实现此功能的建议将不胜感激,

谢谢。

【问题讨论】:

    标签: c# wpf xaml datagrid


    【解决方案1】:

    如果我正确理解您的问题,那么我认为更简单的方法是在 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 的属性以其他方式控制,那么您只需将 Trigger 更改为 DataTrigger

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

    【讨论】:

    • 感谢您的快速回复,是否会在用户编辑数据时在运行时更新?
    • @Purplegoldfish:是的,Validation.HasError 是一个附加属性,因此每次触发器的值发生变化时都会收到通知。如果你想绑定你的属性IsRowValid 它要么必须是一个依赖属性,要么你必须实现 INotifyPropertyChanged
    • 谢谢,我想知道为什么它没有更新,然后发现我打错了!现在效果很好,干杯。
    猜你喜欢
    • 2011-05-05
    • 2013-03-10
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2013-04-07
    • 2017-12-31
    相关资源
    最近更新 更多