将WPF窗口附加到桌面

时间:2011-05-29 23:31:40

标签: wpf windows-desktop-gadgets

我创建了一个没有chrome和透明背景的WPF应用程序

WindowStyle="None" AllowsTransparency="True"

IntPtr windowHandle = new WindowInteropHelper(window).Handle;
IntPtr oldParent = SetParent(windowHandle, desktopHandle);

但每当我尝试将此窗口设置为桌面进程的子级时(因此它不受“显示桌面”命令影响)它会停止绘制。如果我将AllowTransparency更改回False,它会按预期工作,但我确实希望它是透明的,没有边框。

有人能给我任何关于如何使这项工作正确的建议吗?我可以通过在Winforms应用程序中使用相同的方法来实现此功能。

1 个答案:

答案 0 :(得分:0)

我怀疑它适用于Winforms而不适用于WPF的原因是Winforms使用GDI进行渲染,而WPF使用DirectX。这些技术具有互操作性问题,这些问题在此处更加详细,特别是在“透明度和顶级Windows”一节中。

http://msdn.microsoft.com/en-us/library/aa970688.aspx

您可以通过在Win32窗口中托管WPF visual来解决此问题,详见此处:

http://msdn.microsoft.com/en-us/library/ms742522.aspx#hosting_a_wpf_page