7

我正在尝试使用以下代码打印 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>

这不是一个真正的关键问题,但如果有人有解决方法会很好。

4

1 回答 1

2

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

可能你最好的选择是在打印之前禁用阴影,然后重新启用它们。

于 2013-09-06T03:48:20.827 回答