问题如下:我们有一个应用程序在名为Display的控件中显示实时图像。在显示控件内的实时图像上可以存在(可能是交互式的)图层(Display
控件基本上是底部带有LiveImageLayer
的网格)。大多数可用图层由线条图形组成,不会遮挡图像。某些图层由标准WPF控件(如按钮或滑块)组成(具有更改的模板,因此它们使用线条图形进行渲染)。甚至可以使用DrawingContext直接绘制某些图层。
为了提高实时噪声图像之上的图层图形的可见性和可读性,我们尝试为图层分配DropShadow
效果。从视觉角度来看,这非常有效。但是,从性能的角度来看,这是非常糟糕的。由于ImageLayer的快速更新(高达60Hz),所有具有图像更新频率的图层都会重新计算DropShadow
个效果(即使图层本身不会改变)。
我们可以为每一层手动实现老式阴影(下面用黑色笔刷相同的图形,向右下方移动)。如果没有更好的方法,我们实际上会这样做。
所以,我的问题是:是否有任何自动或半自动方式来实现这样的阴影?我想在实际图层下面创建移位矩形,将画笔设置为实际图层的可视画笔。但是,我发现没有办法(除了效果)将视觉刷重新着色为黑色。
有什么想法吗?
答案 0 :(得分:1)
我有一段时间与shodows有类似的性能问题,我最终只是使用Border
来制作假阴影,但是在我的Usercontrols中,我使用LinearGradientBrush
使阴影更逼真但我记不起画笔设置了,但这就是它产生的效果。
<Grid>
<Border Margin="57,74,162,114" BorderThickness="2,0,0,2" CornerRadius="5" BorderBrush="#AA000000">
<Button Content="StackOverflow" />
</Border>
</Grid>
WPF Effects
被渲染为阴影以解决像你描述的问题,这有点令人遗憾。