【问题标题】:WPF - DataGrid - Set cell color based con cell contentWPF - DataGrid - 设置基于单元格颜色的单元格内容
【发布时间】:2023-01-13 02:45:44
【问题描述】:

我正在学习 WPF。我正在尝试编写一个应用程序,该应用程序将根据其他方法计算的数据显示内置代码的表格。这似乎工作正常。 我的 xaml 代码是:

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                <DataGrid Height="308" Margin="12,21,0,0" Name="mydataGrid" Width="722"/>
</ScrollViewer>

后面的代码创建了一个 DataTable 并添加了我需要的列:

 dt = new DataTable("drx");
            DataColumn sfn = new DataColumn("SFN", typeof(int));
            DataColumn sbf0 = new DataColumn("subframe0", typeof(string));
            DataColumn sbf1 = new DataColumn("subframe1", typeof(string));
            DataColumn sbf2 = new DataColumn("subframe2", typeof(string));
            DataColumn sbf3 = new DataColumn("subframe3", typeof(string));
            DataColumn sbf4 = new DataColumn("subframe4", typeof(string));
            DataColumn sbf5 = new DataColumn("subframe5", typeof(string));
            DataColumn sbf6 = new DataColumn("subframe6", typeof(string));
            DataColumn sbf7 = new DataColumn("subframe7", typeof(string));
            DataColumn sbf8 = new DataColumn("subframe8", typeof(string));
            DataColumn sbf9 = new DataColumn("subframe9", typeof(string));

            dt.Columns.Add(sfn);
            dt.Columns.Add(sbf0);
            dt.Columns.Add(sbf1);
            dt.Columns.Add(sbf2);
            dt.Columns.Add(sbf3);
            dt.Columns.Add(sbf4);
            dt.Columns.Add(sbf5);
            dt.Columns.Add(sbf6);
            dt.Columns.Add(sbf7);
            dt.Columns.Add(sbf8);
            dt.Columns.Add(sbf9);

稍后,当计算数据时,我会显示它:

            foreach (var item in data.dataGrid)
            {
                DataRow dr = dt.NewRow();
                dr[0] = item.sfn;
                dr[1] = item.subframes[0] ? "ON" : "";
                dr[2] = item.subframes[1] ? "ON" : "";
                dr[3] = item.subframes[2] ? "ON" : "";
                dr[4] = item.subframes[3] ? "ON" : "";
                dr[5] = item.subframes[4] ? "ON" : "";
                dr[6] = item.subframes[5] ? "ON" : "";
                dr[7] = item.subframes[6] ? "ON" : "";
                dr[8] = item.subframes[7] ? "ON" : "";
                dr[9] = item.subframes[8] ? "ON" : "";
                dr[10] = item.subframes[9] ? "ON" : "";

                dt.Rows.Add(dr);
            }

            mydataGrid.ItemsSource = dt.DefaultView;
            mydataGrid.Items.Refresh();

这产生了预期的结果:

我现在想根据单元格内容更改单元格颜色,基本上是突出显示那些内容设置为“ON”的单元格

我一直在做一些阅读,看起来最好的方法是使用绑定。我尝试了在网上阅读的不同选项。以下内容对我来说没问题,它不会崩溃或产生任何异常,但不会添加任何背景颜色:

<DataGrid x:Name="mydataGrid">
                    <DataGridTextColumn Binding="{Binding Name}">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Style.Triggers>
                                    <Trigger Property="Text" Value="ON">
                                        <Setter Property="Background" Value="LightGreen"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>
                </DataGrid

有小费吗?

非常感谢

【问题讨论】:

  • 为什么要检查&lt;Trigger Property="Text" Value="John"&gt;中的值"John"
  • 我的错误,它被设置为先前测试的值。我纠正了它。谢谢!

标签: c# wpf data-binding datagrid


【解决方案1】:

您的 XAML 中有错误。

  • 你的绑定是错误的:&lt;DataGridTextColumn Binding="{Binding Name}"&gt;把它改成&lt;DataGridTextColumn Binding="{Binding subframe0}"&gt;
  • 你的触发值是错误的:&lt;Trigger Property="Text" Value="John"&gt; 将其更改为&lt;Trigger Property="Text" Value="ON"&gt;

所以它应该工作。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2021-09-23
    • 2015-08-08
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多