跨越多个窗口的Perisistant窗口10个虚拟桌面?

我有C#WPF程序与多个窗口。 我已经添加了对Windows 10桌面的支持,但用户希望在桌面之间移动时,一些窗口仍然保留在屏幕上。

例如,如果窗口A在第一个桌面上打开,并且他们翻转到第二个桌面,他们希望窗口A保持在新桌面上的相同位置。

我知道的唯一function是来自VirtualDesktopManager:

GetWindowsDesktopId() IsWindowOnCurrentVirtualDesktop() MoveWindowToDesktop() 

有没有办法做到这一点?

还有一种方法来检测桌面翻转已启动? 因为如果是这样,我总是可以调用IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用MoveWindowToDesktop()来放置它。 似乎有点破解,但如果我有办法检测到桌面的变化将完成工作。

Solutions Collecting From Web of "跨越多个窗口的Perisistant窗口10个虚拟桌面?"

您可以检测到虚拟桌面的变化,找到一个不错的GitHub项目以及在Windows 10中处理虚拟桌面所需的代码以及更多功能。

虚拟桌面GitHub

要获取事件并模拟在每个桌面上停留的窗口,可以执行以下操作。

 VirtualDesktop.CurrentChanged += (o, e) => { this.Dispatcher.Invoke(() => { var h = new WindowInteropHelper(this).Handle; if (!VirtualDesktopHelper.IsCurrentVirtualDesktop(h)) { this.MoveToDesktop(VirtualDesktop.Current); } }); }; 

Dispatcher.Invoke是必要的,因为事件是在一个不同的线程,然后是UI的,所以调用必须封送到UI线程。