将WPF窗口附加到桌面

将WPF窗口附加到桌面,wpf,windows-desktop-gadgets,Wpf,Windows Desktop Gadgets,我创建了一个WPF应用程序,它没有chrome和透明的背景 WindowStyle="None" AllowsTransparency="True" IntPtr windowHandle = new WindowInteropHelper(window).Handle; IntPtr oldParent = SetParent(windowHandle, desktopHandle); 但是,每当我试图将此窗口设置为桌面进程的子窗口时(这样它就不会受到“显示桌面”命令的影响),它就会停止绘

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

WindowStyle="None" AllowsTransparency="True"

IntPtr windowHandle = new WindowInteropHelper(window).Handle;
IntPtr oldParent = SetParent(windowHandle, desktopHandle);
但是,每当我试图将此窗口设置为桌面进程的子窗口时(这样它就不会受到“显示桌面”命令的影响),它就会停止绘制。如果我将AllowTransparency更改回False,它将按预期工作,但是我确实希望它是透明的,并且没有边界


有谁能给我一些建议,如何使这项工作正确?我可以通过在Winforms应用程序中使用相同的方法来实现这一点。

我怀疑它对Winforms而不是WPF起作用的原因是Winforms使用GDI进行渲染,而WPF使用DirectX。这些技术具有互操作性问题,在这里有更详细的介绍,特别是在“透明度和顶级窗口”一节中

您可以通过在Win32窗口中托管WPF visual解决此问题,如下所述: