Как мне задать имя задания печати при использовании элемента управления DocumentViewer?
-
09-09-2019 - |
Вопрос
Я использую элемент управления WPF DocumentViewer для отображения документа XPS следующим образом:
viewer.Document = xpsDocument.GetFixedDocumentSequence();
При нажатии кнопки печати внутри программы просмотра документов все печатается нормально, однако название задания печати - System .Windows.Документы.Исправлена последовательность документов, которая далека от идеальной.
Как мне задать название задания на печать?
Я знаю, как использовать PrintDialog.PrintDocument() позволяет мне задать имя, но я не вижу, как это сделать с помощью элемента управления DocumentViewer.
Решение
Я нашел решение.
Добавьте это в 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 не привязано к.Не знаю почему.
Другие советы
У меня была такая же проблема, однако переопределение команды Печати не сработало бы в моей ситуации, поэтому я нашел другое решение, которое работает так же хорошо
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);
}
}