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


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


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

  • 相关阅读:
    mysql在windows下备份&恢复数据库语句
    Postman(三)、获取响应数据
    LoadRunner(八)、常用的接口压测格式
    LoadRunner(七)、集合点
    LoadRunner(六)、事务
    LoadRunner(五)、参数化之文本参数化
    repmgr安装使用
    PostgreSQL 游标的种类
    win server 2019 资源管理器 内存占用高
    给MySQL中某表增加一个新字段,并设为主键值为自动增长。
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041947.html
Copyright © 2011-2022 走看看