Перехват PrintDialog в XPS Document Writer - PullRequest
2 голосов
/ 18 февраля 2011

В настоящее время я предоставляю пользователю два элемента управления: Сохранить и Распечатать. Когда пользователь выбирает Сохранить, область отображения WPF упаковывается и отправляется через XpsDocumentWriter, и пользователю предлагается подписать новый документ xps. Когда пользователь выбирает Печать, PrintDialog.PrintVisual печатает ту же область на выбранном пользователем принтере.

Все хорошо, за исключением того, что Microsoft XPS Document Writer - один из вариантов для принтеров. Есть ли способ предотвратить или перехватить выбранный пользователем модуль записи документов XPS и отправить его в метод Save, чтобы я мог предложить пользователю подписать документ xps?

1 Ответ

2 голосов
/ 18 февраля 2011

Отказ от ответственности : я никогда не использовал PrintDialog раньше, но похоже, что-то вроде этого может работать:

System.Windows.Controls.PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
    PrintQueue selectedQueue = printDialog.PrintQueue;
    if (selectedQueue.Name == "Microsoft XPS Document Writer")
    {
        // Run your XPS save & sign code
    }
    else
    {
        // Run your printDialog.PrintVisual() code
    }
}

Мне не очень нравится иметь жестко запрограммированное имя принтера (полагаю, оно зависит от языковых настроек). Возможно, есть лучшее свойство PrintQueue, которое можно использовать для идентификации этого принтера.

...