2

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

viewer.Document = xpsDocument.GetFixedDocumentSequence();

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

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

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

4

2 回答 2

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 方法。不知道为什么。

于 2009-02-26T01:43:31.490 回答
3

我遇到了同样的问题,但是在我的情况下覆盖打印命令不起作用,所以我发现了另一个同样有效的解决方法

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);
    }
}
于 2012-07-15T16:48:46.360 回答