首页 > 解决方案 > 将浮动选项卡与主窗口分开处理的功能

问题描述

上下文:我启动我的主窗口。在该窗口中,我创建了三个新选项卡。我浮动两个选项卡并将另一个留在主窗口中。我目前正在尝试解决两个问题:

  1. 我希望能够在不隐藏其他浮动选项卡的情况下最小化主窗口。

  2. 当将焦点转移到另一个程序(例如 Chrome)然后单击我的浮动选项卡时,我不希望我的所有其他浮动选项卡 + 主窗口回到前面,实际上隐藏了我的其他程序。

我相信这应该是可能的,因为 Visual Studio UI 是使用 WPF 构建的,我可以使用 VS 中的浮动选项卡来实现此功能。

标签: c#wpfavalondockxceed

解决方案


是的,你可以这样做。之所以最小化是因为浮动窗口的默认所有者是主窗口。所以你必须设置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 ?? "";
        });
    }

推荐阅读