Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Чтобы улучшить другие ответы даже немного больше, следующий код также учитывает коэффициенты масштабирования, например. для моих 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);

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

Ответ 2

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

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;
}

Ответ 3

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

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

var bounds = ApplicationView.GetForCurrentView().VisibleBounds;

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

Window.Current.Activate();

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

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

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

Ответ 4

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

 public MainPage()
    {
        this.InitializeComponent();

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

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

Ответ 5

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

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

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

Ответ 6

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

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.

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

Ответ 7

Просто установите имя главной сетки или страницы и вызовите его ширину или высоту для нужного элемента:

Element.Height = PagePane.Height;
Element.width = PagePane.Width;

это самый простой способ использования!