在FlowDocument中设置TableCell垂直居中遇到的问题
2015-11-10 10:05
489 查看
最近在程序中用到了WPF中的FlowDocument生成一个文档,其中有对System.Windows.Documents.Table的使用,在使用的过程中发现这家伙居然不支持设置垂直居中。一个程序,内部逻辑是里子,外部显示是面子,而boss显然是既要里子更要面子,于是折腾开始。
先对着MSDN撸,无果。接着满世界问问题,在stackoverflow上提问题,有人给了个线索,这个针对一个TableRow只有一个TableCell的情况时是极好的,奈何前期别人已经将程序写成了一个TableRow中有多个TableCell,要我再去更改程序逻辑比较头疼。于是上MSDN论坛求助,热心的老外给了我一个计算TableCell高度的方法(虽然最后发现有点问题,还是非常感谢)。
最后的方法是通过遍历Table来获取其每行的高度,并通过设置该行TableCell的padding,使其呈现垂直居中的效果。获取行高度的方法如下:
具体的遍历方法就不贴了,然后是通过一个按钮来触发垂直居中的设置,为了避免设置过程中界面卡死,采用异步刷新的方式,并且将后台线程中调用操作的优先级设置得较低。
好了,思路就是这样,个人感觉还是比较挫,不过鉴于我是一个菜鸟,再接再厉吧。
先对着MSDN撸,无果。接着满世界问问题,在stackoverflow上提问题,有人给了个线索,这个针对一个TableRow只有一个TableCell的情况时是极好的,奈何前期别人已经将程序写成了一个TableRow中有多个TableCell,要我再去更改程序逻辑比较头疼。于是上MSDN论坛求助,热心的老外给了我一个计算TableCell高度的方法(虽然最后发现有点问题,还是非常感谢)。
最后的方法是通过遍历Table来获取其每行的高度,并通过设置该行TableCell的padding,使其呈现垂直居中的效果。获取行高度的方法如下:
private double getRowHeight(TableRow row) { double maxHeight = 0; foreach (TableCell cell in row.Cells) { Rect startRect = cell.ElementStart.GetCharacterRect(LogicalDirection.Forward); Rect endRect = cell.ElementEnd.GetNextInsertionPosition(LogicalDirection.Backward).GetCharacterRect(LogicalDirection.Forward); double Height = (endRect.Bottom - startRect.Top); maxHeight = maxHeight > Height ? maxHeight : Height; } return maxHeight; }
具体的遍历方法就不贴了,然后是通过一个按钮来触发垂直居中的设置,为了避免设置过程中界面卡死,采用异步刷新的方式,并且将后台线程中调用操作的优先级设置得较低。
好了,思路就是这样,个人感觉还是比较挫,不过鉴于我是一个菜鸟,再接再厉吧。
相关文章推荐
- ScrollView为根布局,无法从顶部开始显示
- 部分博客中的代码已放到了GitHub上,欢迎大家下载阅读!
- 连接数据库语法
- 如何将图片插入数据库
- 转:iOS9的新特性以及适配方案
- 基于GitLab的前端Assets发布体系
- 分享:Android之自定义标题
- Oracle显示游标的使用及游标for循环
- DRBD
- My Network programming library
- Spring利用JDBCTemplate实现批量插入和返回id
- 【Leetcode】之Merge Two Sorted Lists
- 分享大数据视频教程
- jquery中attr和prop的区别分析
- Android Bundle类
- JAVA异常处理机制
- Sublime Text快捷键和使用技巧
- 王总QQ聊天对话
- Eclipse离线安装 Genymotion
- 11.20开幕:Oracle + MySQL 嘉年华群星云集