Как определить ориентацию экрана - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь различить устройство, находящееся в альбомном или портретном режиме.Повороты на 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: GetForCurrentView должен вызываться в потоке, связанном с CoreWindow.

Функция вызывается 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 голосов
/ 24 ноября 2018

Это должно работать.

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

ApplicationData.Current.LocalSettings.Values["Orientation"] = isInLandscapeMode ? 
"Landscape" : "Portrait";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...