酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windowsストアアプリで画面毎に回転に対応するかどうかを決定する/強制的に縦画面(横画面)に切り替える

Windowsストアアプリでは、縦画面(以降、Portrait)に対応するか横画面(以降、Landscape)に対応するかを指定することができます。

Windowsストアアプリで回転に対応しないようにする」では、アプリ全体(すべての画面)でデバイスの回転に対応させるかどうかについてご紹介しました。

本記事では、画面ごとにサポートする回転方向を指定させる方法と、強制的に画面をPortrait(またはLandscape)に切り替える方法をご紹介したいと思います。

前準備

まずは、前準備としてアプリとして、すべてのデバイスの回転に対応させるようにしておきます。下図を参考に4つの状態すべてにチェックをつけておきます。

f:id:ch3cooh393:20130710014900p:plain

準備はこれだけで大丈夫です。

画面毎にサポートする回転方向を指定する

Windows.Graphics.Display名前空間にDisplayPropertiesクラスがあります。DisplayPropertiesクラスは、物理ディスプレイの情報を管理するクラスで、例えばディプレイの向きであったり、ディスプレイの論理ピクセル数を取得することができます。

そのうちのひとつ、AutoRotationPreferencesプロパティでは、アプリが優先する向きを指定することが可能です。

例えば、ここではMainPage.xamlではLandscapeにのみ対応したい場合は、下記のようにMainPageクラスのコンストラクタにて、DisplayProperties.AutoRotationPreferencesプロパティに「DisplayOrientations.Landscape」を指定しています。

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

namespace RotateSample
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            // トップ画面は、Landscape固定
            Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences 
                = Windows.Graphics.Display.DisplayOrientations.Landscape;
        }

強制的に画面をPortrait(縦画面)に切り替える

ボタンをクリックされると強制的に画面をPortrait(縦画面)に切り替える処理は以下の通りです。やっていることは、前述したした通り、優先される回転方向を指定しているだけです。

    private void btn4_Click(object sender, RoutedEventArgs e)
    {
        Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences
            = Windows.Graphics.Display.DisplayOrientations.Portrait;
    }

強制的に画面をLandscape(横画面)に切り替える

ボタンをクリックされると強制的に画面をLandscape(横画面)に切り替える処理は以下の通りです。

    private void btn5_Click(object sender, RoutedEventArgs e)
    {
        Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences
            = Windows.Graphics.Display.DisplayOrientations.Landscape;
    }

参考