2015-11-05 167 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線程。