使用DocumentViewer控件时如何设置打印作业的名称?

时间:2009-02-26 00:58:55

标签: .net wpf xps documentviewer

我使用WPF DocumentViewer控件来显示XPS文档,如下所示:

viewer.Document = xpsDocument.GetFixedDocumentSequence();

单击文档查看器中的打印按钮时,所有内容都打印正常,但是打印作业的名称是System.Windows.Documents.FixedDocumentSequence,这是不太理想的。

如何设置打印作业的名称?

我知道使用PrintDialog.PrintDocument()让我设置名称,但我看不到如何使用DocumentViewer控件。

2 个答案:

答案 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);
    }
}