您的位置:首页 > 其它

在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,使其呈现垂直居中的效果。获取行高度的方法如下:

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;
}


具体的遍历方法就不贴了,然后是通过一个按钮来触发垂直居中的设置,为了避免设置过程中界面卡死,采用异步刷新的方式,并且将后台线程中调用操作的优先级设置得较低。

好了,思路就是这样,个人感觉还是比较挫,不过鉴于我是一个菜鸟,再接再厉吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: