Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有效的按钮赢得';t打印_C#_Wpf - Fatal编程技术网

C# 有效的按钮赢得';t打印

C# 有效的按钮赢得';t打印,c#,wpf,C#,Wpf,我正在尝试使用以下代码打印WPF窗口: PrintDialog printDialog = new PrintDialog(); if (printDialog.ShowDialog() == true) { var printArea = printDialog.PrintQueue.GetPrintCapabilities() .PageImageableArea; var item = (FrameworkElement)t

我正在尝试使用以下代码打印WPF窗口:

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);
}
它工作得非常好,但由于一个非常奇怪的原因,按钮没有出现在打印的文档上

我发现原因似乎是我在按钮上设置了DropShadowEffect,如果我将其移除,按钮将显示在打印的文档上:

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


这不是一个真正的关键问题,但如果有人能找到解决办法,那就太好了。

这样的效果是作为在GPU上运行的像素着色器实现的。我最好的猜测是,打印作业的渲染是在CPU上完成的,因此它无法访问必要的像素着色器来进行绘制

最好的办法可能是在打印前禁用阴影,然后在打印后重新启用阴影