31

UWP アプリは一般的なデスクトップ システムでウィンドウ モードで実行されるため、画面解像度を取得する "古い" 方法は機能しなくなります。

の古い解像度はWindow.Current.Boundsに示すようなものでした。

(プライマリ) ディスプレイの解像度を取得する別の方法はありますか?

4

7 に答える 7

58

他の回答をさらに改善するために、次のコードはスケーリング係数も処理します。たとえば、Windows ディスプレイの 200% (正しく 3200x1800 を返します) と Lumia 930 の 300% (1920x1080) です。

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

他の回答で述べたように、これはルート フレームのサイズが変更される前に、デスクトップで正しいサイズのみを返します。

于 2015-08-11T08:46:06.140 に答える
12

いつでもどこでもこのメソッドを呼び出します (モバイル/デスクトップ アプリでテスト済み):

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;
}
于 2017-01-01T20:30:26.180 に答える
2

私が見つけた唯一の方法は、ページのコンストラクター内です。

 public MainPage()
    {
        this.InitializeComponent();

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

Windows 10 Mobile ではまだテストしていませんが、新しいリリースが公開されたらテストします。

于 2015-08-11T08:27:30.243 に答える
1

画面サイズを取得するには、次のメソッドを使用します。

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

Window.Current.Activate(); の後に、App.xaml.cs からこのメソッドを呼び出す必要があります。OnLaunched メソッドで。

サンプル コードは次のとおりです。完全なプロジェクトをダウンロードできます。

于 2016-08-16T03:03:34.397 に答える
-3

メイン グリッドまたはページの名前を設定し、必要な要素の幅または高さを呼び出すだけです。

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

それはあなたが使用できる最も簡単な方法です!

于 2015-11-16T23:00:42.370 に答える