我使用WPF DocumentViewer控件来显示XPS文档,如下所示:
viewer.Document = xpsDocument.GetFixedDocumentSequence();
单击文档查看器中的打印按钮时,所有内容都打印正常,但是打印作业的名称是System.Windows.Documents.FixedDocumentSequence,这是不太理想的。
如何设置打印作业的名称?
我知道使用PrintDialog.PrintDocument()让我设置名称,但我看不到如何使用DocumentViewer控件。
答案 0 :(得分:4)
我找到了解决方案。
将此添加到XAML
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Print" PreviewExecuted="CommandBinding_PreviewExecuted" Executed="CommandBinding_Executed" />
</Window.CommandBindings>
这就是
背后的代码private void CommandBinding_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
{
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
{
dialog.PrintDocument(Document.DocumentPaginator, "Print Job Title");
}
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
//needed so that preview executed works
}
有几点需要注意。如果未绑定Exectued事件,则不会发生PreviewExecuted方法。不知道为什么。
答案 1 :(得分:3)
我有同样的问题,但是覆盖Print命令在我的情况下不起作用,所以我发现另一个工作同样有效
internal class MyDocumentViewer : DocumentViewer
{
public string JobTitle { get; set; }
protected override void OnPrintCommand()
{
PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() == true)
dialog.PrintDocument(Document.DocumentPaginator, JobTitle);
}
}