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

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

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

Текущее разрешение моего экрана 1920*1200, но height 960.0 и width 1536.0!!!

Что случилось с ним?
Заранее спасибо.

25
задан Mohammad Dayyan 10 February 2010 в 10:52
поделиться

5 ответов

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

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

34
ответ дан 28 November 2019 в 18:27
поделиться

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

1
ответ дан 28 November 2019 в 18:27
поделиться

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

0
ответ дан 28 November 2019 в 18:27
поделиться

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

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

-1
ответ дан 28 November 2019 в 18:27
поделиться

Для еще более надежной реализации вы должны рассчитать коэффициенты 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 должны совпадать что вы видите в окне свойств монитора.

25
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: