2015-11-05 117 views
1

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

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

我所知道的唯一功能是从VirtualDesktopManager:

GetWindowsDesktopId() 
IsWindowOnCurrentVirtualDesktop() 
MoveWindowToDesktop() 

有没有办法做到这一点?

还有一种方法来检测桌面翻转何时启动?因为如果是这样,我总是可以调用IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用MoveWindowToDesktop()将它放在那里。看起来有点像黑客,但如果我有办法检测桌面变化,就可以完成工作。

回答

2

可以检测到虚拟桌面的变化,发现所需的代码与虚拟桌面解决在Windows 10

Virtual Desktop GitHub

要获取该事件并模拟一个很好的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线程。