Несколько экранов WPF — Не удается разместить окно на дополнительном мониторе при работе с областью.Слева-отрицательное значение

#c# #wpf

Вопрос:

Обновление: Это была внутренняя проблема. Я создал новое приложение WPF и попробовал настроить несколько мониторов с окном без полей, без размеров, без окон. Все это прекрасно работало.

Проблема возникает, если вы переносите свое окно на рабочий стол. Я проверю дальше и обновлю этот вопрос.

Оригинальный вопрос:

Я устанавливаю Window.Left и Window.Top для WorkingArea.Left и WorkingArea.Top которые я использую System.Windows.Forms.Screen.AllScreens . Окно без полей, без размеров, с фиксированной шириной. Установив эти значения, я привязываю окно к левому краю экрана. Мне нужно иметь возможность делать это на нескольких мониторах, но я не могу заставить это работать.

У меня есть ComboBox место, где вы можете выбрать монитор, на котором хотите, чтобы появилось окно. Как только пользователь выбирает монитор, я считываю его WorkingArea.Left WorkingArea.Top значения и и соответственно размещаю свое окно.

У меня есть 2 монитора. Когда основной монитор находится слева, координаты, которые я получаю с помощью рабочей области, относятся WorkingArea.Left = 0 к левому (основному) монитору и WorkingArea.Left = 1920 к правому (вспомогательному монитору). Позиционирование работает правильно.

Однако, когда основной монитор находится справа, теперь появляется дополнительный левый монитор WorkingArea.Left = -1920 . Когда я устанавливаю Window.Left это значение, мое окно просто исчезает.

Вот настройка монитора:

введите описание изображения здесь

Я попытался добавить в окно разные значения.Влево, например, перемещая его с шагом 128 пикселей, мне удается заставить его отображаться на дополнительном левом мониторе, как только он достигнет Window.Left = 0 , но он никогда не сможет отображаться на основном правом мониторе. Сначала WorkingArea.Left = 1792 край моего окна отображается на основном правом мониторе , но как только он достигает 1920, он снова исчезает.

Почему я не могу изменить положение окна на отрицательное значение, когда монитор сообщает об отрицательном WorkingArea.Left значении ?

Зачем WorkingArea.Left = 0 показывать окно на левом краю дополнительного левого монитора, если значение WorkingArea.Left для этого монитора равно -1920?

Комментарии:

1. Я не уверен, но могу себе представить, что winforms и wpf используют разные координаты экрана. Вы пробовали распечатать положение вашего окна на нужном экране? Класс SystemParameters имеет некоторые свойства, которые вы могли бы использовать, но не все, которыми обладает класс экрана winforms.

2. SystemParameters.VirtualScreenLeft сообщает то же значение, что и в WorkingArea.Left зависимости от того, где находится основной монитор. Сообщает -1920, когда основной монитор находится справа, и 0, когда основной монитор находится слева.