WPF学习笔记-FlowDocument实现表格单元格垂直居中以及边框设置

news/2024/7/8 8:31:31

文章目录

  • 概述
  • 一、基本方案
    • 1.1 添加Grid
    • 1.2 添加列
    • 1.3 添加行
    • 1.4 添加Grid的时候同时添加行和列
  • 1.5 添加元素
    • 1.6 获取指定单元格的元素
    • 1.7 添加TextBlock元素
      • 1.7.1 直接添加字符串
      • 1.7.2 添加Paragraph
    • 1.8 获取文本内容
    • 1.9 获取元素
  • 二、其他操作
    • 2.1 设置边框
    • 2.2 设置隔行颜色
    • 2.3 设置自动合并单元格
    • 2.4 分割单元格
  • 总结

太羽惊鸿一留衣
诗号:一弦一调一管笙,太羽荒音锁残年;一棋一局一盅子,惊鸿留影人留衣。
武道内发七修之一,头戴月冠帽,喜好棋奕,武学兼各家之长,有隐世高人之风。与外聚七修的日吹烟为多年棋友,当初与意琦行打败外七修后,一留衣受日吹烟遗言所托,带著鬼瞳与三机谶离开叫唤渊薮,透过无涯之涯空间隙缝来到中阴界,就此隐居泥犁森狱,并结识鬼师缉仲,赠予三机谶。
在这里插入图片描述

概述

FlowDocument是WPF的高级文档功能(如分页和列)承载流内容和设置流内容格式。
其中的块元素Table可以很方便的添加并展示表格,但是其无法实现自动换行,我尝试了网上搜索解决方案以及自己尝试修改。
在网上搜索了不同的解决方案,包括手动计算高度,通过Margin属性来实现类似居中的问题,或者尝试在单元格中添加BlockUIContainerl来实现居中,但是实际由于TableCell自身没有居中,或者适应宽度,最终都以失败告终。

最终我通过Grid实现了该功能,而且可以跨页自动换行。

一、基本方案

基本思路是通过BlockUIContainer作为容器,然后使用Grid替换Table,通过Border来设置边框,通过TextBlock来替代TableCell,进而实现表格居中,只需要设置TextBlock的居中模式就可以自动居中了。

1.1 添加Grid


        /// <summary>
        /// Add grid control.
        /// </summary>
        /// <returns></returns>
        public static Grid AddGrid(FlowDocument flowDocument, Grid grid)
        {
   
            if (flowDocument == null) return null;

            BlockUIContainer uIContainer = new BlockUIContainer();
            uIContainer.Padding = new Thickness(0);
            flowDocument.Blocks.Add(uIContainer);
            grid.Margin = new Thickness(0);
            uIContainer.Child = grid;

            return grid;
        }

1.2 添加列

        /// <summary>
        /// 添加列
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="rowCnt"></param>
        public static void AddGridNewColumns(Grid grid, int columnCnt)
        {
    
            if (grid == null) return;
            for (int i = 0; i < columnCnt; i++)
            {
   
                grid.ColumnDefinitions.Add(new ColumnDefinition());
                for (int rowIndex = 0; rowIndex < grid.RowDefinitions.Count; rowIndex++)
                {
   
                    AddGridChildren(grid, new Border(), rowIndex, grid.ColumnDefinitions.Count - 1);
                }
            }
        }

1.3 添加行

        /// <summary>
        /// 添加行
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="rowCnt"></param>
        public static void AddGridNewRows(Grid grid, int rowCnt)
        {
    
            if (grid == null) return;
            for (int i = 0; i < rowCnt; i++)
            {
   
                grid.RowDefinitions.Add(new RowDefinition());
                for (int colIndex = 0; colIndex < grid.ColumnDefinitions.Count; colIndex++)
                {
   
                    Border border = new Border();
                    AddGridChildren(grid, border, grid.RowDefinitions.Count - 1, colIndex);
                }
            }
        }

1.4 添加Grid的时候同时添加行和列

        /// <summary>
        /// Add grid control.
        /// </summary>
        /// <param name="rowCnt"></param>
        /// <param name="columnCnt"></param>
        /// <returns></returns>
        public static Grid AddGrid(FlowDocument flowDocument, int rowCnt = 0, int columnCnt = 0)
        {
   
            if (flowDocument == null) return null;

            BlockUIContainer uIContainer = new BlockUIContainer();
            flowDocument.Blocks.Add(uIContainer);
            Grid grid = new Grid();
            grid.Margin = new Thickness(0, 5, 0, 5);
            uIContainer.Child = grid;
            AddGridNewColumns(grid, columnCnt);
            AddGridNewRows(grid, rowCnt);

            return grid;
        }

1.5 添加元素

        /// <summary>
        /// Add UIELement to grid.
        /// </summary>
        /// <param name="grid"></param>
        /// <param name="element"></param>
        /// <param name="row"></param>
        /// <param name="column"></param>
        public static void AddGridChildren(Grid grid, UIElement element, int row = 

http://lihuaxi.xjx100.cn/news/2139368.html

相关文章

php反序列化漏洞——phar反序列化漏洞

一.什么是phar文件 类比java语言 JAR是开发Java程序一个应用&#xff0c;包括所有的可执行、可访问的文件&#xff0c;都打包进了一个JAR文件里使得部署过程十分简单。 PHAR("Php ARchive")是PHP里类似于JAR的一种打包文件 对于PHP 5.3 或更高版本&#xff0c;Ph…

【ELK+Kafka+filebeat分布式日志收集】部署filebeat和Kibana(三)

filebeat下载 官网:https://www.elastic.co/cn/downloads/beats/filebeat 或者 cd /opt wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.8.1-linux-x86_64.tar.gz依次执行如下命令

【问题处理】银河麒麟操作系统实例分享,鲲鹏服务器GaussDB测试ping延迟过高问题

1.问题环境 系统环境 物理机 网络环境 私有网络 硬件环境 机型 TaiShan 200 (Model 2280) (VD) 处理器 HUAWEI Kunpeng 920 5250 内存 32GB*16 显卡 无 主板型号 BC82AMDDRE 架构 ARM 固件版本 iBMC固件版本 3.03.00.31 (U82) 单板ID 0x00a9 BIOS版本 1.8…

Windows基线安全检测-安全配置检测

Windows基线安全检测-安全配置检测 前言 Windows在生产环境中是使用最多的一个系统&#xff0c;大部分为客户端&#xff0c;少部分为服务端&#xff1b; 然而其实很多用户对windows系统不是很了解&#xff0c;安全配置更是如此&#xff1b; 因此我们安全人员要定期对员工的主…

医疗器械测试面试准备—质量部总监二面

今天要去参加一个医疗器械公司的二面&#xff0c;面试官职责是质量部总监&#xff0c;尝试从质量总监的角度去准备面试。 1、医疗器械相关法规&#xff1a; 医疗器械产品测试需要了解的主要法规包括以下几个&#xff1a; &#xff08;1&#xff09;FDA&#xff08;美国食品药品…

os模块篇(七)

文章目录 os.grantpt(fd, /)os.isatty(fd, /)os.lockf(fd, cmd, len, /)os.login_tty(fd, /)os.lseek(fd, pos, whence, /)os.open(path, flags, mode0o777, *, dir_fdNone) os.grantpt(fd, /) os.grantpt(fd) 是 Python 中的一个函数&#xff0c;用于在 POSIX 系统上启用伪终…

算法打卡day23

今日任务&#xff1a; 1&#xff09;39. 组合总和 2&#xff09;40.组合总和II 3&#xff09;131.分割回文串 39. 组合总和 题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;…

微服务(基础篇-008-es、kibana安装)

目录 05-初识ES-安装es_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p81&vd_source60a35a11f813c6dff0b76089e5e138cc 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik…