按钮带有特效不会打印。

7
我将尝试使用以下代码打印WPF窗口:

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

这并不是一个非常关键的问题,但如果有人能提供一种解决方法那就太好了。
1个回答

2

类似这样的效果是通过在GPU上运行的像素着色器来实现的。我猜测打印作业所需的渲染是由CPU完成的,因此它将无法访问必要的像素着色器来进行绘图。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接