WinForm转WPF时遇PrintDocument未找到错误,求按钮打印字符串方案
嘿,这个问题我太熟了!你遇到的The type or namespace name 'PrintDocument' could not be found错误,本质是因为PrintDocument是Windows Forms专属的打印组件,WPF有一套完全独立的打印系统,压根没包含这个类,所以编译器找不到它。
下面我直接给你解决方法——实现按钮点击打印一段字符串的完整方案,分步骤来:
1. 先搞懂WPF的打印逻辑
WPF的打印核心是基于文档对象(比如FlowDocument)和PrintDialog控件:
PrintDialog:负责弹出系统打印对话框,让用户选择打印机、设置参数FlowDocument:用来编排要打印的内容,支持文本格式、换行、边距等设置
2. 完整代码实现
第一步:XAML里加打印按钮
先在你的WPF窗口XAML中添加一个按钮,绑定点击事件:
<Window x:Class="YourProjectName.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="打印测试" Height="200" Width="300"> <Grid> <Button Content="打印字符串" Click="PrintBtn_Click" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Grid> </Window>
第二步:后台C#代码实现打印逻辑
在窗口的后台代码里写PrintBtn_Click事件处理方法,这是核心:
using System.Windows; using System.Windows.Controls; using System.Windows.Documents; namespace YourProjectName { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void PrintBtn_Click(object sender, RoutedEventArgs e) { // 你要打印的字符串内容 string contentToPrint = "这是我要打印的测试文本!\n第二行内容\n第三行自定义内容"; // 创建WPF流式文档,用来承载打印内容 FlowDocument printDoc = new FlowDocument(); // 设置页面尺寸(8.5x11英寸,96是WPF默认DPI) printDoc.PageWidth = 8.5 * 96; printDoc.PageHeight = 11 * 96; // 设置页边距 printDoc.PagePadding = new Thickness(60); // 将字符串添加到文档中,还可以设置字体、字号 Paragraph printPara = new Paragraph(new Run(contentToPrint)) { FontSize = 14, LineHeight = 1.5, FontFamily = new System.Windows.Media.FontFamily("微软雅黑") }; printDoc.Blocks.Add(printPara); // 弹出打印对话框 PrintDialog printDialog = new PrintDialog(); // 如果用户点击了"打印"按钮 if (printDialog.ShowDialog() == true) { // 执行打印操作,第二个参数是打印任务的名称(会显示在打印机队列里) printDialog.PrintDocument(((IDocumentPaginatorSource)printDoc).DocumentPaginator, "WPF打印任务"); } } } }
3. 额外说明
- 不需要额外添加任何程序集引用,这些类(
PrintDialog、FlowDocument)都是WPF核心库自带的,默认项目已经包含 - 如果不需要复杂格式,也可以简化代码,但用
FlowDocument的方式最灵活,后续要加格式(比如加粗、换行)也很方便 - 测试的时候记得确保你的电脑有可用的打印机(虚拟打印机也行)
内容的提问来源于stack exchange,提问作者lewis4u
相关产品推荐
相关产品推荐

