如何检测屏幕方向

时间:2018-11-23 16:32:35

标签: c# .net uwp

我正在尝试区分处于横向或纵向模式的设备。 180°旋转对我来说并不重要,只是哪一侧更长。

我尝试过

SimpleOrientation OReading = SimpleOrientationSensor.GetDefault().GetCurrentOrientation();

if(OReading == SimpleOrientation.NotRotated || OReading == SimpleOrientation.Rotated180DegreesCounterclockwise)
    ApplicationData.Current.LocalSettings.Values["Orientation"] = "Landscape";
if (OReading == SimpleOrientation.Rotated90DegreesCounterclockwise || OReading == SimpleOrientation.Rotated270DegreesCounterclockwise)
    ApplicationData.Current.LocalSettings.Values["Orientation"] = "Portrait";

,但第一行已引发NullReferenceException。正确的方法是什么?

我有一个.NET组件,从技术上讲,它也可以执行此操作,但如果可能的话,我宁愿在UWP中执行。

请注意,我不是在模拟器中运行,而是在支持旋转的设备上启动应用程序。

我实际上不需要传感器数据,我只想知道屏幕方向如何,这可能与传感器数据不同。

编辑:

public async void ChangedAsync(AppResourceGroupInfoWatcher sender, AppResourceGroupInfoWatcherExecutionStateChangedEventArgs args)
{
    DisplayInformation current = DisplayInformation.GetForCurrentView();

这也不起作用,在UWP中它使我崩溃

  

Windows.Graphics.Display:必须在与CoreWindow关联的线程上调用GetForCurrentView。

该函数正在由AppResourceGroupInfoWatcher调用。

我正在使用:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Windows.ApplicationModel;
using Windows.Foundation;
using Windows.Foundation.Metadata;
using Windows.Graphics.Display;
using Windows.Storage;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

定位版本1803

1 个答案:

答案 0 :(得分:0)

这应该有效。

bool isInLandscapeMode = 
Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().Orientation == 
Windows.UI.ViewManagement.ApplicationViewOrientation.Landscape;

ApplicationData.Current.LocalSettings.Values["Orientation"] = isInLandscapeMode ? 
"Landscape" : "Portrait";