一  优化理由

如下图所示,如果按照 C1FlexGrid 自带的单元格边框设置,即对每个单元格的 CellStyle 的 BorderThickness 进行设置,会得到如下图的效果:

[C1] 优化 C1FlexGrid 单元格边框

其中,明显可以看到如果两个相邻的单元格同时设置了那条相邻的边,则会看起来很粗……原因很简单,C1FlexGrid是在 Grid 的基础上扩展,并且对每个单元格的绘制都是通过嵌套一层 Border 处理的,然后楼主就闲着 dt 自己用 Grid 模拟了一个简单的 C1FlexGrid 表格,然后用 Border 嵌套放入,设置了一下 Border 的边框,效果一模一样啊,重叠部分都变粗了;还有一个问题就是,C1FlexGrid 可以设置 GridLinesBrush 属性,来显示默认的条条框框的显示(即时未设置单元格边框),如图中的灰色线条。但是问题来了,如图中(1,0,0,0)单元格设置,右侧和下方的默认线条没了,偶虽然不想要该单元格右边框和下边框,但你也不能把默认的条条框框的线条给弄没了啊……

这对于处女座的楼主来说,简直是不可容忍的缺陷啊,于是楼主就参照 C1FlexGrid 的 Demo 工程 ExcelBook 5.0 做了自己的优化处理,并将该优化应用到一直在持续完善的 仿Excel扩展C1FlexGrid控件 中去。

二  优化思路

在 Demo——ExcelBook 5.0 中有如下一段代码,可以看出来,它们在每个单元格的内容外围嵌套了四层 Border,分别来绘制单元格的上、下、左、右边框及其颜色:

  1 // ** overrides
  2 public override void Apply(Border bdr, SelectedState selState)
  3 {
  4     base.Apply(bdr, SelectedState.None)
  5     ApplyBorder(bdr, _bdrLeft, new Thickness(_bdrThickness.Left, 0, 0, 0))
  6     ApplyBorder(bdr, _bdrTop, new Thickness(0, _bdrThickness.Top, 0, 0))
  7     ApplyBorder(bdr, _bdrRight, new Thickness(0, 0, _bdrThickness.Right, 0))
  8     ApplyBorder(bdr, _bdrBottom, new Thickness(0, 0, 0, _bdrThickness.Bottom))
  9 }
 10 void ApplyBorder(Border bdr, Brush br, Thickness t)
 11 {
 12     if (br != null && t != _thicknessEmpty)
 13     {
 14         // create inner border
 15         var inner = new Border()
 16         inner.BorderThickness = t
 17         inner.BorderBrush = br
 18 
 19         // transfer content
 20         var content = bdr.Child
 21         bdr.Child = inner
 22         inner.Child = content
 23 
 24         // transfer padding
 25         inner.Padding = bdr.Padding
 26         bdr.Padding = _thicknessEmpty
 27     }
 28 }
 29 
ExcelCellStyle

相关文章:

  • 2021-11-28
  • 2022-01-14
  • 2021-11-27
  • 2021-12-05
  • 2021-11-19
  • 2022-12-23
  • 2021-08-24
  • 2021-10-02
猜你喜欢
  • 2021-12-19
  • 2021-06-17
  • 2021-12-03
  • 2022-12-23
  • 2021-06-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案