在多个 windows 10 个虚拟桌面上持久 window?
Persistent window across multiple windows 10 virtual desktops?
我有多个 windows 的 C# WPF 程序。我添加了对 windows 10 个桌面的支持,但用户希望在桌面之间移动时一些 windows 留在屏幕上。
例如,如果 window A 在第一个桌面上打开,然后他们翻到第二个桌面,他们希望 window A 留在新桌面上的相同位置。
我知道的唯一功能来自 VirtualDesktopManager:
GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()
有办法吗?
还有,有没有办法检测桌面翻转何时启动?因为如果是这样,我总是可以调用 IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用 MoveWindowToDesktop() 将其放置在那里。似乎有点 hack,但如果我有检测桌面变化的方法就可以完成工作。
您可以检测到虚拟桌面的变化,找到了一个不错的 GitHub 项目,其中包含必要的代码以及更多处理虚拟桌面的功能 Windows 10。
要获取事件并模拟 window 停留在每个桌面上,您可以执行以下操作。
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 线程。
我有多个 windows 的 C# WPF 程序。我添加了对 windows 10 个桌面的支持,但用户希望在桌面之间移动时一些 windows 留在屏幕上。
例如,如果 window A 在第一个桌面上打开,然后他们翻到第二个桌面,他们希望 window A 留在新桌面上的相同位置。
我知道的唯一功能来自 VirtualDesktopManager:
GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()
有办法吗?
还有,有没有办法检测桌面翻转何时启动?因为如果是这样,我总是可以调用 IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用 MoveWindowToDesktop() 将其放置在那里。似乎有点 hack,但如果我有检测桌面变化的方法就可以完成工作。
您可以检测到虚拟桌面的变化,找到了一个不错的 GitHub 项目,其中包含必要的代码以及更多处理虚拟桌面的功能 Windows 10。
要获取事件并模拟 window 停留在每个桌面上,您可以执行以下操作。
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 线程。