我正在使用自定义窗口处理c#wpf应用程序(allowtransparency = true,resize = none,window style = none)。
现在我想添加类似于zune pc软件的投影。我读到了这个,所包含的drophadoweffect并没有涵盖我窗户的所有角度,据说它会扼杀性能。
我想像这样实现它:我在布局网格中添加一个边距,我在最大化应用程序时以编程方式删除。
添加可应用于网格的投影的最佳方法是什么,这不会影响性能并在所有方向上投下阴影?
答案 0 :(得分:10)
我尝试了这里发布的解决方案,但没有一个让我接近我想要的最终结果(见下面的截图)。所以我尝试了几个不同的东西,并在这里发布我的解决方案,以防有人有兴趣实现类似的东西。顺便说一句:如果你能改进我的解决方案,请告诉我,因为我发现它现在有点多余了。
现在可以使用驱动此效果的代码:
<Window ...
WindowStyle="None" AllowsTransparency="True" Background="Transparent"
...>
<Border>
<Border.Effect>
// opacity does not need to be specified but it looks cooler when you do
<DropShadowEffect BlurRadius="20" ShadowDepth="0" Opacity="0.8"
Color="Blue" />
</Border.Effect>
// make sure the value for Grid Margin is the same as DropShadowEffect
// BlurRadius
<Grid Background="White" Margin="20">
// I tried setting borderthickness and borderbrush to the previous
// <Border> element but instead of the border being shown right after
// the grid and before the drop shadow, it would show after the drop
// shadow making the overall effect very ugly
<Border BorderThickness="1" BorderBrush="Black">
// now you can specify whatever you want to display in the window
<Grid>
....
</Grid>
</Border>
</Grid>
</Window>
答案 1 :(得分:4)
DropShadowEffect
没有“杀死性能”...它是使用硬件加速渲染的,并且在窗口上渲染投影对于当前的GPU来说并不是什么大问题。你可能会混淆DropShadowBitmapEffect
,它是软件渲染的。无论如何,所有BitmapEffects
在3.5 SP1中已经过时,在4.0中根本不起作用,现在只能使用Effects
答案 2 :(得分:4)
方向-75,ShadowDepth为2,BlurRadius为27对我有帮助。
最好的方法是使用混合来做这些。
HTH
答案 3 :(得分:2)
建立Princes的代码,我想粘贴最终产品。
<Window x:Class="RDNScoreboard.Views.InitialWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="InitialWindow" Height="300" Width="300"
WindowStyle="None"
AllowsTransparency="True" Background="Transparent"
BorderThickness="3" >
<Border>
<Border.Effect>
<DropShadowEffect BlurRadius="27" Color="Black" Opacity="0.8" ShadowDepth="2" Direction="-75" />
</Border.Effect>
<Grid Background="White" >
</Grid>
</Border>