it-swarm.com.ru

Получить разрешение экрана в приложении Win10 UWP

Поскольку приложение UWP работает в оконном режиме на распространенных настольных системах, «старый» способ получения разрешения экрана больше не работает. 

Старое разрешение с Window.Current.Bounds было похоже на показано в.

Есть ли другой способ получить разрешение (основного) дисплея? 

25
Alex Witkowski

Чтобы еще больше улучшить другие ответы, следующий код также учитывает коэффициенты масштабирования, например, для моих 200% для моего дисплея Windows (правильно возвращает 3200x1800) и 300% Lumia 930 (1920x1080).

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;
var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
var size = new Size(bounds.Width*scaleFactor, bounds.Height*scaleFactor);

Как указано в других ответах, это только возвращает правильный размер на рабочем столе, прежде чем размер корневого фрейма будет изменен.

49
sibbl

Вызывайте этот метод в любом месте, в любое время (проверено в мобильном приложении/приложении для ПК)

public static Size GetCurrentDisplaySize() {
    var displayInformation = DisplayInformation.GetForCurrentView();
    TypeInfo t = typeof(DisplayInformation).GetTypeInfo();
    var props = t.DeclaredProperties.Where(x => x.Name.StartsWith("Screen") && x.Name.EndsWith("InRawPixels")).ToArray();
    var w = props.Where(x => x.Name.Contains("Width")).First().GetValue(displayInformation);
    var h = props.Where(x => x.Name.Contains("Height")).First().GetValue(displayInformation);
    var size = new Size(System.Convert.ToDouble(w), System.Convert.ToDouble(h));
    switch (displayInformation.CurrentOrientation) {
    case DisplayOrientations.Landscape:
    case DisplayOrientations.LandscapeFlipped:
        size = new Size(Math.Max(size.Width, size.Height), Math.Min(size.Width, size.Height));
        break;
    case DisplayOrientations.Portrait:
    case DisplayOrientations.PortraitFlipped:
        size = new Size(Math.Min(size.Width, size.Height), Math.Max(size.Width, size.Height));
        break;
    }
    return size;
}
10
SeregaLBN

Итак, ответ от Хуан Пабло Гарсия Коэльо приведи меня к решению - Спасибо за это! 

Ты можешь использовать 

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

но вы должны позвонить до того, как окна отображаются в моем случае сразу после

Window.Current.Activate();

это хорошее место. В это время вы получите границы окна, в котором появится ваше приложение. 

Большое спасибо за помощь в решении этой проблемы :)

С уважением Алекс 

3
Alex Witkowski

Более простой способ:

var displayInformation = DisplayInformation.GetForCurrentView();
var screenSize = new Size(displayInformation.ScreenWidthInRawPixels, 
                          displayInformation.ScreenHeightInRawPixels);

Это не зависит от текущего размера просмотра. В любое время возвращает реальное разрешение экрана.

3
Vyacheslav

Единственный способ, который я нашел, находится внутри конструктора страницы:

 public MainPage()
    {
        this.InitializeComponent();

        var test = ApplicationView.GetForCurrentView().VisibleBounds;
    }

Я не тестировал в Windows 10 Mobile, когда появится новая версия, я протестирую это.

2
Juan Pablo Garcia Coello

Используйте этот метод, чтобы получить размер экрана:

public static Size GetScreenResolutionInfo() 
{ 
    var applicationView = ApplicationView.GetForCurrentView(); 
    var displayInformation = DisplayInformation.GetForCurrentView(); 
    var bounds = applicationView.VisibleBounds; 
    var scale = displayInformation.RawPixelsPerViewPixel; 
    var size = new Size(bounds.Width * scale, bounds.Height * scale); 
    return size; 
} 

Вы должны вызывать этот метод из App.xaml.cs, после Window.Current.Activate (); в методе OnLaunched.

Вот пример кода, и вы можете скачать полный проект.

0
Ann Yu