ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-05 22:04:54  阅读:207  来源: 互联网

标签:templates datagrid wpf c


的背景

我使用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();

解决方法:

您将设置基于TextElement.BackgroundProperty的TextBlock.BackgroundProperty,而不是设置基于Panel.BackgroundProperty的TextBox.BackgroundProperty或Control.BackgroundProperty.同样,您的glass_brush是不透明的黑色画笔,而不是透明的画笔.您可以使用Brushes.Transparent.尝试:

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

标签:templates,datagrid,wpf,c
来源: https://codeday.me/bug/20191105/1998274.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有