如何根据单元格背景颜色更改WPF DataGrid单元格小部件背景颜色?

时间:2010-08-24 10:21:21

标签: c# wpf templates datagrid

背景

我使用VS2010,DataGrid(随WPF提供的那个),我手动创建行和列。我为行设置了各种颜色,具体取决于它们的状态(但为了简单起见,我们说它是黄色的)。它起作用是因为datagrid使用标签来显示文本,当我为行设置背景时,它也反映在标签小部件中。

但是,我无法ctrl + c(复制)单元格的内容,所以现在我为列创建自定义模板,我使用文本框来显示数据。

问题

Texbox阻止了单元格的背景,所以实际上我得到了(例如)带有黄色边框的白色单元格(文本框)的数据网格。

问题

如何制作文本框(这是我的情况)请注意细胞的背景颜色?我尝试使用技巧并为所有文本框设置透明画笔,但我仍然在单元格(文本框)中获得白色背景。

当前代码:

        grid.BeginInit();
        grid.Columns.Clear();


        int i = 0;

        var glass_brush = new SolidColorBrush(Color.FromArgb(255,0,0,0));

        foreach (var db_col in query.FieldNames)
        {
            var template = new DataTemplate();
            var elemFactory = new FrameworkElementFactory(typeof(TextBox));
            elemFactory.SetBinding(TextBox.TextProperty, new Binding(String.Format("Visual[{0}]", i)));
            // make the background transparent -- it does not work though
            elemFactory.SetValue(TextBlock.BackgroundProperty,glass_brush);
            template.VisualTree = elemFactory;

            var col = new DataGridTemplateColumn();
            col.CellTemplate = template;
            col.IsReadOnly = true;
            col.Header = db_col;
            grid.Columns.Add(col);
            ++i;
        }

        {
            grid.Items.Clear();


            foreach (var db_row in diffs)
            {
                var row = new DataGridRow();
                row.Item = db_row.Item1;
                row.Background = colors[db_row.Item2];
                grid.Items.Add(row);
            }
        }
        grid.IsReadOnly = true;

        grid.EndInit();

1 个答案:

答案 0 :(得分:4)

您正在设置基于TextBlock.BackgroundProperty的{​​{1}},而不是设置基于TextElement.BackgroundProperty的{​​{1}}或TextBox.BackgroundProperty。此外,您的Control.BackgroundProperty是不透明的黑色笔刷而不是透明笔刷。您可以使用Panel.BackgroundProperty。试试:

glass_brush