将浮动选项卡与主窗口分开的功能

时间:2019-07-02 16:07:16

标签: c# wpf avalondock xceed

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

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

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

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

1 个答案:

答案 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 ?? "";
        });
    }