背景
我使用的是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();