Приложение WinRT Свойство за разделителна способност на екрана

Има ли начин да получите разделителната способност на екрана в приложението WinRt? Знам, че в windows phone е възможно:

 var scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
    var bounds = Window.Current.Bounds;

        var x = (int) (bounds.Width*scaleFactor);
        var y = (int) (bounds.Height*scaleFactor);

      var resolution = String.Format("{0}x{1}", Math.Max(x, y),Math.Min(x,y));


But in winrt I don't have the RawPixelsPerViewPixel method...

Някакви идеи?

Опитах се да следвам фактора на Откриване на мащабиращия фактор на екрана в Публикация в магазина за приложения на Windows 8.1:

ResolutionScale resolutionScale = DisplayInformation.GetForCurrentView().ResolutionScale;

    double scale = (double)resolutionScale / 100.0;

    var bounds = Window.Current.Bounds;

    var x = (int)(bounds.Width * scale ) ;
    var y = (int)(bounds.Height * scale );


    var resolution = String.Format("{0}x{1}", Math.Max(x, y), Math.Min(x,y) );

Но получавам грешни числа, за разделителна способност 1920 x 1080 получавам „1920 x 1008“, а за разделителна способност 800 x 600 получавам „1126 x 743“


person Pavel Durov    schedule 28.10.2015    source източник
comment
comment
Е, тази публикация всъщност не отговори на въпроса ми... Искам да получа разделителната способност на екрана - например: 720 x 1280   -  person Pavel Durov    schedule 28.10.2015
comment
Е, след като имате коефициента на мащабиране, можете да приложите същия алгоритъм като предоставения от вас   -  person Kevin Gosse    schedule 28.10.2015
comment
Опитах и ​​получавам нещо като: 1920x1008, когато резолюцията на екрана ми е зададена на 1920 x 1080, когато променям разделителната способност на нещо друго, например: 800 x 600, получавам: 1126x743   -  person Pavel Durov    schedule 29.10.2015


Отговори (2)


Опитай това:

 var devices = PointerDevice.GetPointerDevices();
 var rect = devices.FirstOrDefault().ScreenRect;
 var dpi = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
 var width = rect.Width * dpi;
 var height = rect.Height * dpi;

Това трябва да работи както за настолен компютър, така и за мобилно устройство в UWP приложения.

person JuniperPhoton    schedule 29.10.2015
comment
Проблемът е, че RawPixelsPerViewPixel не е дефиниран в WinRT Api, а само на телефон Windows. Ето защо кодът работи на WP, а не на WinRT - person Pavel Durov; 29.10.2015
comment
Моля, кажете ми на каква точно платформа работите? Кодът не е проблем в приложенията на UWP. Когато споменавате WinRT, имате предвид Windows RT 8.1? - person JuniperPhoton; 29.10.2015
comment
Да, имам предвид Windows RT 8.1 - person Pavel Durov; 29.10.2015

Имам решение, базирано на хак, който видях веднъж за получаване на информация за операционната система в приложението WinRT 8.1. Създадох временен уеб изглед и отидох до низ, в този html низ извиках window.external.notify с javascript информация за резолюцията:

 var resolution = Math.max(window.screen.width, window.screen.height)  
                        + " x " + Math.min(window.screen.width, window.screen.height);

След това в C# кода получавам параметъра като извикано събитие webView. Не съм много доволен от това решение, въпреки че работи добре...

person Pavel Durov    schedule 29.10.2015