Я собираюсь обнаруживать разрешение со следующим кодом в WPF:
double height = System.Windows.SystemParameters.PrimaryScreenHeight;
double width = System.Windows.SystemParameters.PrimaryScreenWidth;
Текущее разрешение моего экрана 1920*1200, но height
960.0 и width
1536.0!!!
Что случилось с ним?
Заранее спасибо.
Имейте в виду, что все места расположения и размеры 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", а не с пикселями.
Попробуйте SystemParameters.FullPrimaryScreenWidth и FullPrimaryScreenHeight, я считаю, что PrimaryScreenWidth и Height возвращают размер доступного окна клиента после удаления панели задач и других полос рабочего стола на ваш экран.
вы можете использовать это вместо: http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.primaryscreen.aspx
попробуйте это. . я считаю, что это может исправить ошибку .....
System.Windows.Form1.Screen.PrimaryScreen.Bounds.Height; System.Windows.Form1.Screen.PrimaryScreen.Bounds.Widtht;
Для еще более надежной реализации вы должны рассчитать коэффициенты 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 должны совпадать что вы видите в окне свойств монитора.