views:

181

answers:

1

I've using the WPF DocumentViewer control to display an XPS Document like so:

viewer.Document = xpsDocument.GetFixedDocumentSequence();

When the print button inside the document viewer is clicked everything prints okay, however the name of the print job is System.Windows.Documents.FixedDocumentSequence, which is less than ideal.

How do I set the name of the print job?

I know using PrintDialog.PrintDocument() lets me set the name, but I can't see how to do it using the DocumentViewer control.

+1  A: 

I found a solution.

Add this to the XAML

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Print" PreviewExecuted="CommandBinding_PreviewExecuted" Executed="CommandBinding_Executed" />
</Window.CommandBindings>

And this to the code behind

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
}

A couple of things of note. The PreviewExecuted method doesn't happen if the Exectued event isn't bound to. Don't know why.

Ray