我正在尝试区分处于横向或纵向模式的设备。 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
答案 0 :(得分:0)
这应该有效。
bool isInLandscapeMode =
Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().Orientation ==
Windows.UI.ViewManagement.ApplicationViewOrientation.Landscape;
ApplicationData.Current.LocalSettings.Values["Orientation"] = isInLandscapeMode ?
"Landscape" : "Portrait";