跨越多个窗口的Perisistant窗口10个虚拟桌面?
问题描述:
我有C#WPF程序与多个窗口。我已经添加了对Windows 10桌面的支持,但用户希望在桌面之间移动时,一些窗口可以保持在屏幕上。跨越多个窗口的Perisistant窗口10个虚拟桌面?
例如,如果窗口A在第一个桌面上打开,并且他们翻转到第二个桌面,他们希望窗口A保留在新桌面上的相同位置。
我所知道的唯一功能是从VirtualDesktopManager:
GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()
有没有办法做到这一点?
还有一种方法来检测桌面翻转何时启动?因为如果是这样,我总是可以调用IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用MoveWindowToDesktop()将它放在那里。看起来有点像黑客,但如果我有办法检测桌面变化,就可以完成工作。
答
可以检测到虚拟桌面的变化,发现所需的代码与虚拟桌面解决在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线程。