我用WPF写的窗体 windowstyle=none AllowTransparency=true,然后通过margin和dropshadoweffect设置了阴影。
但是这样有个问题,阴影是在窗体内的,当窗体拉到桌面顶端的时候会留阴影的空隙,拉到桌面两端半最大化的时候也会留下四边的阴影。
请问什么办法能做到阴影在window的外面,即像360 或者 微信windows客户端那样的效果。
业界一般是如何实现的?我通过UIAVerify观察它们的句柄树,发现一般都是窗口下一级有个比窗口大一圈的pane用来放阴影。求实现方法
用windows api SetLayeredWindowAttributes
[window WindowStyle=none AllowTransparency=true]
[Border Margin = "10"]
[Border.Effect]
[DropShadowEffect ShadowDepth = "0" BlurRadius = "10" Color = "Gray"/]
[/Border.Effect]
[/Border]
[/window]
需要注意的有两点:
一:Border和Window之间一定要有一定的Margn
二:ShadowDepth 要为0 这样阴影的偏移为0 才能在边框四周
AllowsTransparency="True" windowStyle=“None” 这样应该就行了。不过窗体内如果包含webbrowser这种浏览器控件的话 需要注意 。不能设置 AllowsTransparency="True" 。如果设置为ture 的话 会有渲染问题。
2L的说的已经很清楚了
<Window WindowStyle="None" AllowsTransparency="True" Background="Transprent">
<Border Margin="10" Background="White" CornerRadius="2">
<Border.Effect>
<DropShadowEffect ShadowDepth="0" Color="#777" BlurRadius="10" Opacity="0.8"/>
</Border.Effect>
</Border>
<Border Margin="10" Background="Transprent" CornerRadius="2">
//```你的内容
</Border>
</Window>
楼上说的方法不能解决问题,阴影还是在窗口里面
我尝试过很多方法,也试过修改Window的默认模板,但都不能达到达到真正的无边框阴影,目前要做自定义窗口的话还是只能让阴影留在外面