I "solved" the problem. Well for certan definition of solved. For future reference what I did was override DocumentViewer's own print code by attaching my own on Print command:
<DocumentViewer.CommandBindings>
<CommandBinding Command="ApplicationCommands.Print" Executed="PrintExecute"/>
</DocumentViewer.CommandBindings>
And than in my code I would hide things in the document that I don't want printed, show the dialog and than using XPSDocumentWriter "print" the document into printing quee. Important thing here is to do the printing in Sync and not Async becuase you can only re display things that you have hidden AFTER you have sent the document into printing. Anyway this code is based on this workaround for landscaping pages in WPF.
Anyway the code, it hides all images (makes them transparent), then does the printing and only after printing redisplays them.
DocumentViewer dv = sender as DocumentViewer;
FixedDocument dokument = dv.Document as FixedDocument;
if (dokument == null) return;
PageContent content = dokument.Pages.First();
foreach (UIElement el in content.Child.Children)
{
Image image = el as Image;
if (image != null)
image.Opacity = 0;
}
PrintDialog dialog = new PrintDialog();
dialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue();
dialog.PrintTicket = dialog.PrintQueue.DefaultPrintTicket;
dialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
if (dialog.ShowDialog() == true)
{
XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(dialog.PrintQueue);
writer.Write(dokument, dialog.PrintTicket);
}
foreach (UIElement el in content.Child.Children)
{
Image image= el as Image;
if (image!= null)
image.Opacity = 0.75;
}
Of course there is still at least one problem. For the user the background WILL dissapear while the dialog is open, and I don't see me solving that problem simply since Document Viewer doesn't differentiate between what user sees and what gets sent to the computer.