【问题标题】:Create shadow in WPF without using effect在 WPF 中创建阴影而不使用效果
【发布时间】:2013-01-08 05:09:15
【问题描述】:

问题如下:我们有一个应用程序,它在一个名为 Display 的控件中显示实时图像。显示控件内的实时图像顶部可以有(可能是交互式的)层(Display 控件基本上是一个底部有LiveImageLayer 的网格)。大多数可用图层由线条图形组成,不会遮挡图像。一些图层由标准 WPF 控件组成,例如按钮或滑块(使用更改的模板,因此它们使用线条图形呈现)。有些图层甚至直接使用 DrawingContext 绘制。

为了提高实时嘈杂图像上图层图形的可见性和可读性,我们尝试为图层添加DropShadow 效果。从视觉的角度来看,这非常有效。但是,从性能的角度来看,它非常糟糕。由于 ImageLayer 的快速更新(高达 60Hz),DropShadow 效果会以图像更新频率为所有图层重新计算(即使图层本身没有改变)。

我们可以为每个图层手动实现老式阴影(相同的图形,下方带有黑色笔刷,向右下方移动)。如果没有更好的方法,我们实际上会这样做。

所以,我的问题是:是否有任何自动或半自动的方式来实现这种阴影?我想在实际图层下方创建移动矩形,该笔刷设置为实际图层的视觉笔刷。但是,我发现没有办法(除了效果)将视觉画笔重新着色为黑色。

有什么想法吗?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    不久前,我在使用 shodows 时遇到了类似的性能问题,我最终只是使用 Border 制作了一个假阴影,但是在我的用户控件中,我使用了 LinearGradientBrush 使阴影更加逼真,但我可以'不记得画笔设置了,但这是它创造的一种效果。

    <Grid>
         <Border Margin="57,74,162,114" BorderThickness="2,0,0,2" CornerRadius="5" BorderBrush="#AA000000">
                <Button Content="StackOverflow" />
        </Border>
    </Grid>
    

    WPF Effects 被 CPU 渲染为阴影以解决您所描述的问题,这有点令人遗憾。

    【讨论】:

    • 您好,感谢您的回复。不幸的是,这并不能解决我们的问题 - 我们需要在复杂的几何图形上创建阴影(例如,想象圆形(未填充),其尺寸和显示其直径的文本)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 2011-11-12
    • 2013-01-17
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多