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

4

背景

我使用的是VS2010,DataGrid(WPF中提供的那个),以及手动创建行和列。我为不同状态的行设置不同的颜色(但为了简单起见,让我们假设是黄色)。它之所以奏效,是因为datagrid用标签来显示文本,当我设置行的背景时,标签小部件中的颜色也会反映出来。

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

问题

文本框阻挡了单元格的背景,因此实际上我得到了(例如)具有白色单元格(文本框)和黄色边框的datagrid。

问题

如何使文本框(这是我的情况)知道单元格的背景颜色?我尝试使用一个技巧,在所有文本框中设置透明刷子,但仍然得到单元格(文本框)中的白色背景。

当前代码:

        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个回答

5

您正在设置基于TextElement.BackgroundPropertyTextBlock.BackgroundProperty,而不是基于Panel.BackgroundPropertyTextBox.BackgroundPropertyControl.BackgroundProperty。 此外,您的glass_brush是不透明的黑色画刷,而不是透明的画刷。 您可以使用Brushes.Transparent。 尝试:

elemFactory.SetValue(Control.BackgroundProperty, Brushes.Transparent);

愚蠢的、愚蠢的打字错误!我认为在本应是静态语言的地方有太多动态部分了,否则我就会击中它——当然,我也尝试过将 alpha 通道设为 0。不过你的解决方案非常优雅(对我来说是个教训:使用基本控件属性而不是目标,以避免再次出现打字错误)——非常感谢! - greenoldman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接