2013-09-04 10 views
7

sto cercando di stampare una finestra WPF con il seguente codice:Tasti con effetto non stamperanno

PrintDialog printDialog = new PrintDialog(); 
if (printDialog.ShowDialog() == true) 
{ 
    var printArea = printDialog.PrintQueue.GetPrintCapabilities() 
         .PageImageableArea; 

    var item = (FrameworkElement)this; 
    DrawingVisual visual = new DrawingVisual(); 
    using (DrawingContext context = visual.RenderOpen()) 
    { 
     VisualBrush brush = new VisualBrush(item); 
     context.DrawRectangle(brush, null, 
      new Rect(new Point(printArea.OriginWidth, printArea.OriginHeight), 
        new Size(item.ActualWidth, item.ActualHeight))); 
    } 
    printDialog.PrintVisual(visual, String.Empty); 
} 

Funziona davvero bene, ma per un tempo molto strana ragione, i pulsanti non compare sul il documento stampato

ho scoperto che la causa sembra essere che io ho posto un DropShadowEffect sul pulsante, se lo tolgo, viene visualizzato il pulsante sul documento stampato:

<Setter Property="Effect"> 
    <Setter.Value> 
     <DropShadowEffect Color="Gray" Opacity=".50" ShadowDepth="8" /> 
    </Setter.Value> 
</Setter> 

Questo non è davvero un problema critico, ma sarebbe bello se qualcuno avesse una soluzione alternativa.

risposta

2

Gli effetti del genere vengono implementati come pixel shader eseguiti sulla GPU. La mia ipotesi migliore è che il rendering eseguito per un lavoro di stampa sia eseguito sulla CPU, quindi non avrebbe accesso ai pixel shader necessari per eseguire il disegno.

Probabilmente la soluzione migliore è disattivare le ombre esterne prima della stampa, quindi riattivarle dopo.