zoukankan      html  css  js  c++  java
  • 在FlowDocument中设置TableCell垂直居中遇到的问题


    最近在程序中用到了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;
            }
    


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


    好了,思路就是这样,个人感觉还是比较挫,不过鉴于我是一个菜鸟,再接再厉吧。

  • 相关阅读:
    国家标准比例尺地形图说明(摘要自SuperMap Objects Document)
    常用日期函数
    CMD执行BCP命令
    如何利用.snk文件生成DLL文件中的Publickeytoken
    SQL SERVER数据库的表中修改字段属性被阻止“Prevent saving changes that require table recreation”
    如何生成DLL文件
    如何反编译DLL文件
    Visual Studio 2022激活密钥
    sqlserver跨数据库查询
    jQuery对象与DOM对象之间的转换
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041947.html
Copyright © 2011-2022 走看看