Проблема с разрешением экрана в WPF?

Я собираюсь определить разрешение с помощью следующего кода в WPF:

double height = System.Windows.SystemParameters.PrimaryScreenHeight; double width = System.Windows.SystemParameters.PrimaryScreenWidth; 

Текущее разрешение экрана – 1920 * 1200, но height – 960,0, а width – 1536,0 !!!

Что с этим не так ?
Заранее спасибо.

Имейте в виду, что все местоположения и размеры WPF являются плавающей точкой с единицей 1/96 дюйма. Не пиксели. Это делает разрешение вашего windows независимым. Выполнение математики: высота = 960/96 = 10 дюймов. Если ваш видеоадаптер установлен на 120 DPI (120/96 = 125%): 10 * 120 = 1200 пикселей. То же самое для ширины: 1536/96 * 120 = 1920 пикселей.

System.Windows.Forms работает в единицах пикселей. Вы получаете меньше, чем 1050 для высоты, потому что она вычитает высоту панели задач. Но для WPF вы всегда хотите работать с 1/96 “, а не с пикселями.

Для еще более надежной реализации вам необходимо рассчитать коэффициенты DPI в вашей системе и работать с этими факторами. Нормальное значение DPI равно 96, но некоторые мониторы могут иметь разные значения. Учтите, что ваш код может работать на мониторе с другим значением DPI, чем 96. Рассмотрим этот код:

  private static void CalculateDpiFactors() { Window MainWindow = Application.Current.MainWindow; PresentationSource MainWindowPresentationSource = PresentationSource.FromVisual(MainWindow); Matrix m = MainWindowPresentationSource.CompositionTarget.TransformToDevice; thisDpiWidthFactor = m.M11; thisDpiHeightFactor = m.M22; } 

Затем вы можете использовать эти коэффициенты для получения окончательных значений:

 CalculateDpiFactors(); double ScreenHeight = SystemParameters.PrimaryScreenHeight * thisDpiHeightFactor; double ScreenWidth = SystemParameters.PrimaryScreenWidth * thisDpiWidthFactor; 

Значения ScreenHeight и ScreenWidth должны соответствовать тем, что вы видите в окне свойств вашего монитора.

Попробуйте SystemParameters.FullPrimaryScreenWidth и FullPrimaryScreenHeight, я считаю, PrimaryScreenWidth и Height возвращают размер доступного windows клиента после удаления панели задач и других настольных диапазонов на вашем экране.

вы можете использовать это вместо: http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.primaryscreen.aspx

Если вы установите флажок «Использовать масштабирование DPI в стиле Windows XP», возвращается верное значение «Screen.PrimaryScreen.Bounds». Если нет, возвращаемое значение пропорционально сокращается значением DPI (которое является значением по умолчанию).

Чтобы установить флажок «Использовать масштабирование DPI в стиле Windows XP», разверните узел «Чтобы сделать текст и элементы на экране более четкими в программах, не предназначенных для высокого уровня DPI», в следующей ссылке: http://windows.microsoft. ком / EN-US / windows-Vista / Make-в-текст-на вашем экране, больше или меньше , –

Пожалуйста, вызовите это после загрузки ваших окон.

  public static class Ext { public static Size GetNativePrimaryScreenSize(this Window window) { PresentationSource mainWindowPresentationSource = PresentationSource.FromVisual(window); Matrix m = mainWindowPresentationSource.CompositionTarget.TransformToDevice; var dpiWidthFactor = m.M11; var dpiHeightFactor = m.M22; double screenHeight = SystemParameters.PrimaryScreenHeight * dpiHeightFactor; double screenWidth = SystemParameters.PrimaryScreenWidth * dpiWidthFactor; return new Size(screenWidth, screenHeight); } } 

попробуйте эти .. я считаю, что это может исправить ошибку …..

System.Windows.Form1.Screen.PrimaryScreen.Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;

  • Включение экрана программно
  • Как автоматическое изменение размера и настройка элементов управления формы с изменением разрешения
  • Блокировка ориентации экрана
  • Сделайте снимок экрана с помощью Selenium WebDriver
  • Давайте будем гением компьютера.