#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, когда основной монитор находится слева.