Проблема при создании окна WPF на дополнительном мониторе - PullRequest
5 голосов
/ 03 декабря 2011

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

Вот поток использования:

  1. Открыть файл
  2. Перетащить текущую вкладку на другой монитор
  3. Новый экземпляр приложения создается с установленной в нем вкладкой в ​​том месте, куда пользователь перетащил вкладку.

Отключение выполняется на шаге 3. Новый экземпляр всегда создается на основном мониторе.

Итак, некоторый код для расширения проблемы.

namespace app {
    public class AppView {
      public void OpenInNewWindow()
      {
        // Create a new viewmodel
        var appViewModel = new AppVM();

        //// On my machine this returns the correct screen "DISPLAY2".  The Top and Left properties are 0 and 1680, respectively.
        var targetScreen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);

        ////So we can set the position of the new view
        var appView = new AppView(appViewModel);

        //This seats the currently selected data tab inside the new AppViewModel
        RelocateSelectedViewModel(appViewModel);

        appView.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
        appView.Top = targetScreen.WorkingArea.Top;
        appView.Left = targetScreen.WorkingArea.Left;
        appView.Show();
        // Have to maximize after we Show() or it won't appera on secondary monitors according to THE INTERNET!
        appView.WindowState = System.Windows.WindowState.Maximized;
        appView.Focus();            
      }
    }
}

Полагаю, мне следует упомянутьчто у меня нет проблем с получением второго экрана.targetScreen в приведенном выше коде правильно находит нужный мне экран, а значения Top и Left нового окна корректно устанавливаются в 0 и 1680 соответственно.Просто команда AppView.Show () (которая фактически является Window.Show ()) создает окно на основном экране.

Я перенес этот же код в отдельный проект, и он сработал, чтозаставляет меня поверить, что между моим новым appView и текущим, который переопределяет мои наборы, есть какая-то связь.Кто-нибудь сталкивался с этой проблемой раньше?

1 Ответ

4 голосов
/ 03 декабря 2011

Вы пробовали использовать Winforms Screen.FromControl? Смотрите этот пост .

Вы можете попробовать этот хак из этого поста :

appView.SourceInitialized += (_, __) => appView.WindowState = WindowState.Maximized;
appView.Show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...