Как установить имя задания на печать при использовании элемента управления DocumentViewer? - PullRequest
2 голосов
/ 26 февраля 2009

Я использую элемент управления WPF DocumentViewer для отображения документа XPS следующим образом:

viewer.Document = xpsDocument.GetFixedDocumentSequence();

При нажатии кнопки печати в средстве просмотра документов все печатается нормально, однако имя задания печати - System.Windows.Documents.FixedDocumentSequence, что не идеально.

Как установить имя задания на печать?

Я знаю, что использование PrintDialog.PrintDocument () позволяет мне задать имя, но я не вижу, как это сделать с помощью элемента управления DocumentViewer.

Ответы [ 2 ]

4 голосов
/ 26 февраля 2009

Я нашел решение.

Добавьте это к 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
}

Несколько вещей на заметку. Метод PreviewExecuted не происходит, если событие Exectued не связано с. Не знаю почему.

3 голосов
/ 15 июля 2012

У меня была такая же проблема, однако переопределение команды 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);
    }
}
...