Функциональность для обработки плавающих вкладок отдельно от главного окна.

Контекст: я запускаю главное окно. В этом окне я создаю три новые вкладки. Я перемещаю две вкладки, а другую оставляю в главном окне. Есть две проблемы, которые я сейчас пытаюсь решить:

  1. Я хочу иметь возможность свернуть главное окно, не скрывая при этом и другие плавающие вкладки.

  2. Когда я переключаю фокус на другую программу (например, Chrome), а затем снова нажимаю на мою плавающую вкладку, я не хочу, чтобы все мои другие плавающие вкладки + главное окно возвращались на передний план, фактически скрывая мою другую программу.

Я считаю, что это должно быть возможно, поскольку пользовательский интерфейс Visual Studio построен с использованием WPF, и я могу реализовать эту функциональность, используя плавающие вкладки в VS.


person khansh    schedule 02.07.2019    source источник
comment
Привет, добро пожаловать в переполнение стека. Перейдите по ссылке Как задать вопрос, чтобы получить более подробную информацию о том, как задать вопрос и соответствующим образом обновить свой вопрос. Например, что вы исследовали/пробовали до сих пор.   -  person Jeroen Heier    schedule 02.07.2019
comment
Я не смог ничего найти в Интернете, поэтому не знал, с чего начать.   -  person khansh    schedule 02.07.2019


Ответы (1)


Да, ты можешь это сделать. Причина, по которой оно минимизируется, заключается в том, что владельцем плавающего окна по умолчанию является главное окно. поэтому вам нужно установить 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 ?? "";
        });
    }
person Shloime Rosenblum    schedule 08.09.2019