当前位置: 首页 > news >正文

WPF打印控件内容

当我们想打印控件内容时,如一个Grid中的内容,可以用WPF中PrintDialog类的PrintVisual()方法来实现

界面如下:

XAML代码如下

<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition Width="300"/></Grid.ColumnDefinitions><Grid Grid.Column="0"><Grid Width="800" Name="grid1"><TextBlock TextWrapping="Wrap" FontSize="15">Control authors who want to customize the arrange pass of layout processing should override this method. The implementation pattern should call M:System.Windows.UIElement.Arrange(System.Windows.Rect) on each visible child element, and pass the final desired size for each child element as the finalRect parameter. Parent elements should call M:System.Windows.UIElement.Arrange(System.Windows.Rect) on each child, otherwise the child elements will not be rendered.
Many derived classes offer implementations of this method. Prominent ones include: M:System.Windows.Window.ArrangeOverride(System.Windows.Size), M:System.Windows.Controls.Page.ArrangeOverride(System.Windows.Size) and M:System.Windows.Controls.Control.ArrangeOverride(System.Windows.Size).</TextBlock></Grid></Grid><Grid Grid.Column="1"><Button Height="30" VerticalAlignment="Top" Click="Button_Click">打印</Button></Grid></Grid>

当我们点击按钮时,进行打印

按钮事件:

           PrintDialog pd = new PrintDialog();if (pd.ShowDialog() == true){pd.PrintVisual(this.grid1, "");}

这时我们会发现,虽然 打印的内容是指定的,但打印的大小却是整个窗体的大小,而不仅仅是指定的区域大小。

然后我们就需要用到UIElement的Arrange 方法

MSDN上的解释是

定位子元素,并确定 UIElement 的大小。 父元素从它们的 ArrangeCore 实现(或者是 WPF 框架级别等效项)调用此方法,以便形成递归布局更新。此方法产生第二次布局更新。

修改后的代码如下:

1 if (pd.ShowDialog() == true)
2             {                
3                 this.grid1.Arrange(new Rect(new Size(grid1.ActualWidth, grid1.ActualHeight)));
4                 pd.PrintVisual(this.grid1, "");               
5             }

这样操作以后,打印的大小不再是整 个窗体的大小了,但打印完之后 ,控件 的位置却发生了变化 ,这时候我们只需要再调用一次Arrange方法,将它放回原来的位置就行了

 if (pd.ShowDialog() == true){               Window window = Window.GetWindow(grid1);Point point = grid1.TransformToAncestor(window).Transform(new Point(0, 0));//获取当前控件 的坐标this.grid1.Measure(new Size(grid1.ActualWidth,grid1.ActualHeight));this.grid1.Arrange(new Rect(new Size(grid1.ActualWidth, grid1.ActualHeight)));pd.PrintVisual(this.grid1, "");this.grid1.Arrange(new Rect(point.X, point.Y, grid1.ActualWidth, grid1.ActualHeight));//设置为原来的位置}

这样就可以打印控件 内容了。

如果 想对打印机进行设置,可以查找 WPF PrintDialog的使用方法,下面是简单的设置

                 PrintTicket pt = new PrintTicket();PageMediaSize p = new PageMediaSize(PageMediaSizeName.ISOA4);//pt.PageBorderless = PageBorderless.Unknown;pt.PageMediaSize = p;//pt.PageOrientation = PageOrientation.Portrait;pd.PrintTicket = pt;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 嵌入式linux系统镜像制作day2
  • 软件工程概述(上)
  • 关注自闭症儿童:走进他们孤独的世界
  • CentOS7安装流程步骤详细教程
  • 数学建模预测类—【多元线性回归】
  • 【ARM】Cortex-A72技术手册(1)
  • c语言---文件
  • SQL每日一练-0816
  • CSS的:current伪类:精准定位当前活动元素
  • Kali Linux网络问题解决与静态IP配置技巧
  • uniapp webview子页面向父页面发送数据和触发事件,重点在第3条!!!
  • SpringBoot——整合Swagger
  • [Vue3 + TS + Vite]文件选择器-组件
  • vue3、uniapp-vue3模块自动导入
  • 通过Python脚本git pull 自动重试拉取代码
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2017年终总结、随想
  • JavaScript DOM 10 - 滚动
  • nfs客户端进程变D,延伸linux的lock
  • ng6--错误信息小结(持续更新)
  • Swoft 源码剖析 - 代码自动更新机制
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里云Kubernetes容器服务上体验Knative
  • 安装python包到指定虚拟环境
  • 包装类对象
  • 基于 Babel 的 npm 包最小化设置
  • 老板让我十分钟上手nx-admin
  • 如何编写一个可升级的智能合约
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Docker 部署 Spring Boot项目
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 一个项目push到多个远程Git仓库
  • 自定义函数
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (二)原生js案例之数码时钟计时
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十六)视图变换 正交投影 透视投影
  • (算法)前K大的和
  • (学习总结16)C++模版2
  • (转)母版页和相对路径
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 常见的偏门问题
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /*在DataTable中更新、删除数据*/
  • /boot 内存空间不够
  • ??myeclipse+tomcat
  • @PreAuthorize注解
  • [12] 使用 CUDA 加速排序算法
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [20170713] 无法访问SQL Server
  • [20180224]expdp query 写法问题.txt