У меня есть приложение WPF, которое открывает другое окно WPF в полноэкранном режиме на дополнительном дисплее.Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь получить границы вторичного дисплея, они приходят с неправильными значениями, например: мой дисплей ноутбука имеет разрешение 1920x1080, и в моем приложении это правильно, но на вторичном дисплее, то естьтелевизор с разрешением 1920x1080, он возвращает 2400x1350
![Image 1](https://i.stack.imgur.com/GLsGB.png)
CODE:
foreach (var monitor in System.Windows.Forms.Screen.AllScreens)
{
i++;
if (monitor.Primary)
{
cbMonitors.Items.Add("Monitor (Primary) " + i + " - " + monitor.Bounds.Width + " x " + monitor.Bounds.Height.ToString());
}
else
{
cbMonitors.Items.Add("Monitor " + i + " - " + monitor.Bounds.Width + " x " + monitor.Bounds.Height.ToString());
}
}
cbMonitors.SelectedIndex = 0;
После просмотра Интернета я обнаружил, что проблема была вызванамасштабирование экрана моего ноутбука
![IMAGE 2](https://i.stack.imgur.com/4VLrz.jpg)
и исправлено, создав файл app.manifest и добавив / раскомментировав следующие строки:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<!-- fallback for Windows 7 and 8 -->
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
<!-- falls back to per-monitor if per-monitor v2 is not supported -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
</windowsSettings>
</application>
Теперь ComboBox показываетпредполагаемые значения, но когда я пытаюсь запустить окна, они появляются в неправильных местах: число должно быть в центре каждого экрана, а красная граница представляет границы экрана.
![IMAGE 3](https://i.stack.imgur.com/Yy7ar.png)
Еще раз "исправил" это, включив масштабирование GDI DPI в app.manifest
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<!-- fallback for Windows 7 and 8 -->
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
<!-- falls back to per-monitor if per-monitor v2 is not supported -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness>
<!-- enables GDI DPI scaling -->
<gdiScaling xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
</windowsSettings>
</application>
![IMAGE 4](https://i.stack.imgur.com/Vvqer.png)
Но теперь у меня возникают другие проблемы, и я не могу их исправить.
Теперь границы экрана моего ноутбука (с масштабом 125%) отображаются неправильно, а границы телевизора правильные.
Форма - это все "размыто "
И самое важное / серьезное - это то, что ComboBox" щелкает "при нажатии и не позволяет выбрать элемент.
![IMAGE 5](https://i.stack.imgur.com/PJiYc.png)
Создание ComboBox
<ComboBox Name="cbMonitors" HorizontalAlignment="Left" Margin="169,244,0,0" VerticalAlignment="Top" Width="506" />
Заполнение ComboBox (код сзади):
int i = 0;
foreach (var monitor in System.Windows.Forms.Screen.AllScreens)
{
i++;
if (monitor.Primary) { cbMonitors.Items.Add("Monitor (Primary) " + i + " - " + monitor.Bounds.Width + " x " + monitor.Bounds.Height.ToString()); }
else { cbMonitors.Items.Add("Monitor " + i + " - " + monitor.Bounds.Width + " x " + monitor.Bounds.Height.ToString()); }
}
cbMonitors.SelectedIndex = 0;
И код, используемый для установки позиций окна
System.Windows.Forms.Screen s = System.Windows.Forms.Screen.AllScreens[number];
System.Drawing.Rectangle r = s.Bounds;
Top = r.Top;
Left = r.Left;
Height = s.Bounds.Height;
Width = s.Bounds.Width;
Также, если необходимо, вот полный исходный код моего приложения: https://mega.nz/#!iZ1kCApa!0yAfWY5PDUqdVGzcetbaXZFnb-tdAWmW4WUkYw6KIhI