Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf Shell集成库WindowChrome带阴影_Wpf_Shadow - Fatal编程技术网

Wpf Shell集成库WindowChrome带阴影

Wpf Shell集成库WindowChrome带阴影,wpf,shadow,Wpf,Shadow,我在谷歌上搜索了很多,但找不到任何有效的解决方案。我正在使用Shell集成库来制作定制的Chrome窗口,我还需要为这个窗口添加阴影。有人说将GlassFrameThickness设置为-1可以起到作用,但对我来说不起作用。Jeremiah Morrill建议使用DwmExtendFrameIntoClientArea。我试过了,它也有点效果。阴影看起来不错,但当窗口显示时,它首先显示为一个玻璃框,然后第二秒,真实内容被叠加。这对我来说会引起很多闪烁。有没有办法消除这种闪烁现象,或者有没有更好的

我在谷歌上搜索了很多,但找不到任何有效的解决方案。我正在使用Shell集成库来制作定制的Chrome窗口,我还需要为这个窗口添加阴影。有人说将GlassFrameThickness设置为-1可以起到作用,但对我来说不起作用。Jeremiah Morrill建议使用DwmExtendFrameIntoClientArea。我试过了,它也有点效果。阴影看起来不错,但当窗口显示时,它首先显示为一个玻璃框,然后第二秒,真实内容被叠加。这对我来说会引起很多闪烁。有没有办法消除这种闪烁现象,或者有没有更好的办法只使用Shell集成库?

我遇到了一个类似的问题,在使用自定义chrome时,它不会显示任何阴影。使用这种玻璃时效果很好

我通过设置
GlassFrameThickness=“0,0,0,1”
得到了一个阴影。玻璃杯不见了,我看到了影子

请注意,阴影是一个简单的窗口矩形,所以如果你有一个带有透明胶片的时髦chrome,它可能看起来很有趣

此外,如果您支持最大化状态,请注意,在最大化模式下,您需要在顶级面板元素
“8,8,8”
上设置边距。所有其他模式应为
“0,0,0,0”


对于alimbada,自定义chrome上的
WindowStyle
默认为无。

Shell集成库使用
dwmextendframeintoclienterea
,并处理多个窗口消息以获得效果。如果您使用的是全窗口矩形(即无圆角),则按照建议将其设置为
(0,0,0,1)
,将提供所需的阴影。如果要模拟Aero的圆角,则将其设置为
(8,8,8,8)
将使玻璃框架足够延伸,使角也保持圆角,然后您负责不绘制矩形的角。无论玻璃框的厚度如何,阴影的形状都不会改变


将厚度设置为-1时看到的闪光仍然存在,即使没有完全延伸玻璃框架。所发生的事情是,在内容仍在合成时显示窗口。您可以做的是简化默认UI,使其显示更快(或者您可以将其暂存,先引入simnple背景,然后用可用的内容替换),或者您可以创建并在屏幕外显示窗口,然后在呈现内容后将其移动到所需的开始位置。检测它何时可能准备就绪的简单方法是使用
Priority=Loaded
调用
DispatchTimer
。只有在基本的第一个布局完成后才能调用它。

您是否尝试过将
WindowStyle
设置为
None
?它似乎没有任何作用?在最大化状态下设置边距的好处。但是windowxp的
呢?我在
windows8
windowxpsp2
中测试了一个示例。在
XP
中,似乎不需要边距。因为它的利润率很低,这对我来说很有意义。GlassFrameThickness仅适用于Windows Vista及更高版本,因此您无需在Windows XP上更改页边距。我通常用一些操作系统检测逻辑来处理这个问题。