代码之家  ›  专栏  ›  技术社区  ›  greenoldman

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

  •  3
  • greenoldman  · 技术社区  · 14 年前

    背景

    我使用vs2010、datagrid(与wpf一起交付的)和手动创建行和列。我为行设置了各种颜色,这取决于它们的状态(但为了简单起见,我们假设它是黄色的)。它起作用是因为DataGrid使用标签来显示文本,当我为行设置背景时,它也会反映在标签小部件中。

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

    问题

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

    问题

    如何使文本框(这是我的情况)了解单元格的背景色?我尝试使用一个技巧,为所有文本框设置透明画笔,但在单元格(文本框)中仍然有白色背景。

    当前代码:

            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 回复  |  直到 14 年前
        1
  •  4
  •   Quartermeister    14 年前

    你正在设置 TextBlock.BackgroundProperty ,这是基于 TextElement.BackgroundProperty ,而不是设置 TextBox.BackgroundProperty Control.BackgroundProperty ,这是基于 Panel.BackgroundProperty . 还有,你的 glass_brush 是一个不透明的黑色画笔,而不是一个透明的。你可以使用 Brushes.Transparent . 尝试:

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