本发明涉及WPF领域,具体来讲涉及一种WPF中表格系统及实现方法。
背景技术:
WPF(Windows Presentation Foundation,Windows呈现基础)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。WPF提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
表格控件是一套控件组件,用户可以通过其实现表格内容及样式编辑、表格大小调整、以及单元格合并与拆分等一些功能。
由于WPF现有的承载列表的技术方案是DataGrid控件,该控件可以显示一般的列表数据,但是没有办法实现单元格的合并、拆分等表格功能,WPF自带的表格控件不能对单元格进行拆分、合并和样式设置,用户体验不好。
技术实现要素:
针对现有技术中存在的缺陷,本发明的目的在于提供一种WPF中表格系统及实现方法,能够对单元格进行拆分、合并和样式设置,提升用户体验。
为达到以上目的,本发明采取一种WPF中表格系统,表格由单元格作为基础组件,所述系统包括:内容承担单元,用于构建单元格对象,包括文本样式和背景颜色;边框单元,用于构建单元格边框样式,还用于拖动边框更改行高和列宽;容器单元,包括表格容器和单元格容器,所述表格容器用于定义表格的行、列数、计算行高和列宽、以及合并单元格和拆分单元格,所述单元格容器用于支持内容承担单元和边框单元。
在上述技术方案的基础上,所述容器单元采用WPF中布局控件Grid,内容承担单元采用富文本框控件RichTextBox,边框单元采用控件GridSplitter。
本发明还提供一种WPF中表格实现方法,包括:S1.通过容器单元,根据需求定义表格行列数,并循环计算每一行的行高和每一列的列宽;S2.遍历表格,到达对应的行列后,通过内容承担单元对表格中的单元格添加文本;S3.采用边框单元设置表格边框的宽度和颜色,并且遍历所有单元格,通过每个单元格添加两个控件GridSplitter,分别改变单元格的行高和列宽;S4.将创建后的表格保存成XML文件;表格建成后,合并单元格时,选中单元格所在的起始行列以及所占行列数,设置选中区域的第一个单元格跨行跨列显示,并将其他单元格的内容合并到第一个单元格中显示,然后删除其他单元格;拆分单元格时,获取选中的单元格,在表格容器中添加对应的行列,并在其中创建单元格,将原单元格内容设置到新创建的第一个单元格中。
在上述技术方案的基础上,所述容器单元采用WPF中布局控件Grid,内容承担单元采用富文本框控件RichTextBox,边框单元采用控件GridSplitter。
在上述技术方案的基础上,所述S2中,富文本框控件RichTextBox不仅对文本进行统一的样式修改,还支持单独文字修改为独立的样式。
在上述技术方案的基础上,所述S2中,如果单元格存在背景色,将布局控件Grid的背景设置对应的颜色,并将单元格容器定位到表格容器对应的行列处。
在上述技术方案的基础上,所述S3中,通过修改控件GridSplitter的样式改变边框的样式,拖动控件GridSplitter通过改变表格容器中左右布局的大小,实现行高和列宽的改变。
在上述技术方案的基础上,所述S3中,所述改变边框的样式通过画刷DrawingBrush绘制控件GridSplitter的背景,包括绘制颜色和矢量图形。
在上述技术方案的基础上,所述拆分单元格时,如果选中单元格为已合并成一行的两行单元格,将其拆分成一个3*3的9个单元格,设置表格容器多加一行,9个单元格分别放置在三行中,同时原选中单元格外的第一行不变,第二行跨两行布局。
本发明的有益效果在于:能够实现基本表格功能,包括自定义行列数、编辑单元格文字样式、调整单元格边框样式、修改单元格背景色和大小等功能,满足了日常使用的需求,提升用户体验;并且实现了相邻单元格的合并操作,以及将单元格内部拆分成指定行列表格的功能。
附图说明
图1为本发明实施例WPF中表格系统示意图;
图2为本发明实施例WPF中表格实现方法的流程图;
图3为本发明实施例合并单元格的流程图;
图4为本发明实施例拆分单元格的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
如图1所示,本发明一种WPF中表格系统,表格由单元格作为基础组件,所述表格系统包括内容承担单元、边框单元和容器单元。内容承担单元用于构建单元格对象,包括文本样式和背景颜色。边框单元用于构建单元格边框样式,还用于拖动边框更改行高和列宽。容器单元包括表格容器和单元格容器,表格容器用于定义表格的行、列数、计算行高和列宽、以及合并单元格和拆分单元格,所述单元格容器用于支持内容承担单元和边框单元。具体的,所述容器单元采用WPF中布局控件Grid,内容承担单元采用富文本框控件RichTextBox,边框单元采用控件GridSplitter。表格使用布局控件Grid作为容器,通过表格容器的布局功能,决定单位格的位置、大小、跨行数和跨列数,从而实现表格的拆分,合并单元格功能。富文本框作为内容承载,可以加载文本、图片和控件等,使用文本流来控制字体多变的样式。控件GridSplitter可以呈现单元格的宽度、样式和颜色,还可以提供重新分配Grid行列布局空间的功能,用来实现拖动单元格边框,就改变当前列宽或行高的功能。
如图2所示,本发明一种WPF中表格实现方法,包括如下步骤:
S1.通过容器单元,根据需求定义表格行列数,并循环计算每一行的行高和每一列的列宽。具体的,以WPF中常用布局控件Grid作为表格容器,布局控件Grid的特点是可以自定义行列对内部控件进行布局,根据要表格的行列数定义布局控件Grid中的行列数,并循环计算每一行的高及每一列的宽。
S2.遍历表格,到达对应的行列后,通过内容承担单元对表格中单元格添加文本。具体的,内容承担单元包括富文本框控件RichTextBox,表格容器及行列划分好后,遍历行列,构建单元格对象。富文本框控件RichTextBox不仅能对文本进行统一的样式修改,还支持单独文字修改为独立的样式。遍历到对应的行列后,使用布局控件Grid构建单元格容器,然后添加富文本框控件RichTextBox,如果单元格存在背景色,将布局控件Grid的背景设置对应的颜色,并将单元格容器定位到表格容器对应的行列处,如果有跨行跨列的情况,设置对应的值。
S3.采用边框单元设置表格边框的宽度和颜色,并且遍历所有单元格,通过每个单元格添加两个控件GridSplitter,一个用来改变单元格的行高,另一个用来改变单元格的列宽,并设定初始样式。具体的,单元格的边框主要有两个功能,一是边框的样式,包括宽度和颜色等,二是拖动边框更改行或列的高宽。边框单元采用控件GridSplitter,通过修改控件GridSplitter的样式来改变边框的样式;同时拖动控件GridSplitter,通过改变表格容器中左右布局的大小,实现行高和列宽的改变。改变边框的样式通过画刷DrawingBrush绘制控件GridSplitter的背景,包括绘制颜色和矢量图形,可根据需求定义指定的样式,灵活多样。
S4.单元格创建完毕后,由于要进行保存和读取,所以需要将表格相关的属性进行序列化,保存成XML(Extensible Markup Language,可扩展标记语言),以便于后续读取的时候通过XML文件反序列化成控件对象。
如图3所示,表格建成后,合并单元格的流程如下:
A1.获取选中的所有单元格,计算选中单元格所在的起始行列以及所占的行列数;
A2.设置选中区域的第一个单元格跨行跨列显示,并将其他单元格的内容合并到第一个单元格中显示;
A3.删除其他单元格,构建一个指定跨行跨列的大单元格。
如图4所示,拆分单元格的流程如下:
B1.设置需要拆分单元格的行数和列数;
B2.获取选中的单元格,根据设置的行列,计算新增单元格的起始位置;
B3.在表格容器中添加对应的行列,并在其中创建单元格,将原单元格内容设置到新创建的第一个单元格中。具体的,如果选中单元格为已合并成一行的两行单元格,将其拆分为一个将其拆分成一个3*3的9个单元格,设置表格容器多加一行,9个单元格分别放置在三行中,同时原选中单元格外的第一行不变,第二行跨两行布局。设置列的方式与设置行的方式相同,从而实现单元格拆分的功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。