CanYou8 发表于 2016-5-9 22:18:36

WPF C1Flexgrid行选中以后改变此行文字的颜色,加粗文字显示

如何实现WPF C1Flexgrid行选中以后改变此行文字的颜色,加粗文字显示?

Alice 发表于 2016-5-10 10:15:58

和之前提到的问题一样,都是通过重写CellFactory去设置Foreground等样式信息。

CanYou8 发表于 2016-5-10 13:36:15

重写CellFactory去设置Foreground等样式,是重写CreateCellContent方法吗?这样实现不了在选中当前行的时候,此行文本变色加粗的效果吧?

Alice 发表于 2016-5-10 14:32:47

CanYou8 发表于 2016-5-10 13:36
重写CellFactory去设置Foreground等样式,是重写CreateCellContent方法吗?这样实现不了在选中当前行的时候 ...

通过重写ApplyCellStyles方法实现。
判断是选择的行,然后通过bdr.Child as TextBlock可以设置TextBlock的前景色(比如FontWeight, FontSize等)

CanYou8 发表于 2016-5-10 15:29:00

能否给点代码提示?

Alice 发表于 2016-5-10 17:07:41

CanYou8 发表于 2016-5-10 15:29
能否给点代码提示?
代码片段参考(判断可以根据需求自己写):
public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange range, Border bdr)
      {
            var columnindex = range.Column;
            var rowindex = range.Row;
            var _textblock = bdr.Child as TextBlock;

            if ((columnindex == 2) && (rowindex == 3))
            {
                bdr.Background = new SolidColorBrush(Colors.Red);
                bdr.BorderBrush = Brushes.Blue;
                bdr.BorderThickness = new Thickness(1);
                _textblock.TextDecorations = TextDecorations.Underline;
                _textblock.FontWeight = FontWeights.Bold;
                _textblock.FontSize = 15;
                _textblock.FontStyle = FontStyles.Italic;
            }
      }

CanYou8 发表于 2016-5-11 10:49:15

重写ApplyCellStyles后,还是有点问题,请看代码:
      public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange range, Border bdr)
      {
            var rowindex = range.Row;
            var _textblock = bdr.Child as TextBlock;

            if (null != _textblock && grid.SelectedIndex == rowindex)
            {
                _textblock.Foreground = new SolidColorBrush(Colors.Red);
                _textblock.FontWeight = FontWeights.Bold;
            }
      }1.表头样式不希望也被重写,如何处理?
2.运行时,第1行数据默认被加粗了,如何处理?
3.选中一行后,此行数据变色了,但是没有被加粗显示,如何处理?
4.希望选中当前行后,只是字体颜色变红,字体加粗,而背景色不变。此处背景色变为蓝色了,如何处理?


Demo:





Alice 发表于 2016-5-11 12:02:19

CanYou8 发表于 2016-5-11 10:49
重写ApplyCellStyles后,还是有点问题,请看代码:
1.表头样式不希望也被重写,如何处理?
2.运行时,第1 ...

1,2,3->业务逻辑部分可以通过判断去解决。
比如ApplyCellStyles提供了CellType,你可以判断单元格类型是否是Cell.
4.有提供SelectionBackground属性可以用来设置选择的背景色。

CanYou8 发表于 2016-5-16 13:52:05

选中行以后,此行数据的背景色变了。同样的方式设置和修改,为何加粗的效果没有呢?
      public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange range, Border bdr)
      {
            if (cellType != CellType.Cell) return;

            if (grid.Selection.Row == range.Row)
            {
                var _textblock = bdr.Child as TextBlock;
                if (null == _textblock) return;

                _textblock.FontWeight = FontWeights.Bold; //加粗
                _textblock.Foreground = new SolidColorBrush(Colors.Red); //变色
            }
            base.ApplyCellStyles(grid, cellType, range, bdr);
      }

Alice 发表于 2016-5-16 18:31:29

CanYou8 发表于 2016-5-16 13:52
选中行以后,此行数据的背景色变了。同样的方式设置和修改,为何加粗的效果没有呢?

谢谢您的反馈。
修改后的Demo:
按照您的Demo,改写如下:

      public override void ApplyCellStyles(C1FlexGrid grid, CellType cellType, CellRange range, Border bdr)
      {
            if (cellType == CellType.Cell && (grid.Rows as Row) != null)
            {
                Row rowExt = grid.Rows as Row;
                if (grid.Selection.Row == range.Row)
                  rowExt.FontWeight = FontWeights.Bold;

                else
                  rowExt.FontWeight = FontWeights.Normal;

            }      

            //base.ApplyCellStyles(grid, cellType, range, bdr);
      }
页: [1] 2
查看完整版本: WPF C1Flexgrid行选中以后改变此行文字的颜色,加粗文字显示