上下文:我启动主窗口。在该窗口中,我创建了三个新选项卡。我将其中两个选项卡浮动,将另一个选项卡留在主窗口中。我目前正在尝试解决两个问题:
我希望能够在不隐藏其他浮动标签的情况下最小化主窗口。
将焦点转移到另一个程序(例如Chrome)上然后单击我的浮动选项卡时,我不希望将所有其他浮动选项卡+主窗口放回到最前面,实际上隐藏了我的其他程序。
我相信这应该可行,因为Visual Studio UI是使用WPF构建的,我可以使用VS中的浮动选项卡来实现此功能。
答案 0 :(得分:0)
是的,您可以这样做。之所以将其最小化,是因为浮动窗口的默认所有者是主窗口。因此您必须设置floatingWindow.Owner = null;
,然后才能将主窗口置于浮动窗口的前面。如果要在浮动窗口和主窗口之间切换,可以设置floatingWindow.ShowInTaskbar = true;
。
在我的代码中,我将其放入selectionChanged事件处理程序中,因此当我弹出文档时,它将触发selectionChanged事件。
文档创建
private void userItem_Click(object sender, RoutedEventArgs e)
{
LayoutDocument ld = new LayoutDocument();
ld.Title = "All Users";
ld.ToolTip = "Manage all users";
//selection changed event
ld.IsSelectedChanged += Ld_IsSelectedChanged;
ld.IsActiveChanged += Ld_IsSelectedChanged;
Users users = new Users(ld);
ld.Content = users;
LayoutDocumentPane pane = ((todaysPayments.FindParent<LayoutDocumentPane>() ?? (panal.Children?[0] as LayoutDocumentPane)) ?? new LayoutDocumentPane());
pane.Children.Add(ld);
if (panal.ChildrenCount == 0)
{
panal.Children.Add(pane);
}
ld.IsSelected = true;
}
事件处理程序
public void Ld_IsSelectedChanged(object sender, EventArgs e)
{
//get the floating windows from the DockingManager
manager.FloatingWindows.ToList().ForEach(floatingWindow =>
{
floatingWindow.Owner = null;
floatingWindow.ShowInTaskbar = true;
var fw = floatingWindow.Model as LayoutDocumentFloatingWindow;
floatingWindow.Title = fw?.RootDocument?.Title ?? "";
});
}