【问题标题】:How to set colors of text in specifics cell in WPF DataGRID如何在 WPF DataGRID 中的特定单元格中设置文本颜色
【发布时间】:2012-08-19 12:12:10
【问题描述】:

我有一个比较两个数据表中数据的方法。比较之后,我想在 WPF dataGRID 中可视化这些比较数据(位于名为 ChangeTab 的新 DataTable 中)。

我正在从 DataContext 填充数据网格:

win.TableOfChange.DataContext = ChangeTab.DefaultView;
<DataGrid ItemsSource="{Binding}" Height="107" HorizontalAlignment="Left"....

我正在与问题作斗争,如何用红色显示不同的数据(在 DataTables 中),以及用绿色显示相同的数据 - 类似图片中的:

有没有办法,如何做到这一点(为 C# 中的一些红色和一些绿色设置 WPF dataGRID 单元格的颜色)?

非常感谢!

【问题讨论】:

  • 有没有你用来设置颜色的业务逻辑?
  • 不,没有,这是我的提议。我想用绿色显示未更改的值,用红色显示更改的值。

标签: c# wpf xaml datagrid


【解决方案1】:

我假设您在比较过程中构建了源表,如果是这样,您可以轻松存储一个表示相等的布尔值。然后在CellStyle 中,您可以在该属性上使用DataTrigger,并通过SetterTextElement.Foreground 属性更改为所需的值。

【讨论】:

  • @VilemRousi:哪个绑定? (MikeKulls 的回答给出了一个很好的大纲,你只需将前台绑定到 DataTrigger.Binding,当然不需要转换器)
  • 非常感谢您的回答,我认为这是一个好方法,但我不确定绑定,我无法解决它。因为比较的结果只有一行,所以我可以在这个 DataTable 中添加带有比较状态的新行(0-没有变化,1-新值,2-变化)。所以比较表的列 (name: treti) 现在有 2 行(值和比较状态)。问题在于绑定。我正在尝试这样的事情:&lt;DataTrigger Binding="{Binding treti}" Value="0"&gt; &lt;Setter Property="TextElement.Foreground" Value="Green"/&gt; &lt;/DataTrigger&gt; 但这不起作用。请问你能再帮我一次吗?
  • @VilemRousi:您需要拥有单元级别的信息并在单元级别应用触发器 (CellStyle),使用完整行是行不通的。
【解决方案2】:

我倾向于对网格中的大多数列使用 DataTemplates。您需要创建一个类,如下所示:

class CellContent
{
    public object Content { get; set; }
    public bool IsDifferent { get; set; }
}

然后创建一个类似这样的数据模板:

<DataTemplate x:Key="bob">
    <ContentPresenter Content="{Binding Path=Content}" TextElement.Foreground="{Binding Path=IsDifferent, Converter={StaticResource myConverter}}" />
<DataTemplate>

然后您将模板分配给每一列。

如果 IsDifferent 为真,另一个可能更好的选项是使用触发器来更改颜色。

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多