端的に言うと、Win 8.1ストア・アプリでは4つのビュー状態(view state)を使わなくなるということだ。Win 8ストア・アプリでは、FullScreenLandScape/FullScreenPortrait/Filled/Snappedという4つのビュー状態があった*7。Win 8.1ストア・アプリでは、その区別がなくなるのだ。
Win 8.1ストア・アプリでは、縦長か/横長か、フルスクリーンか/そうでないか、また、ビューの実際のサイズはどれだけかをアプリ側で適宜判断して、必要ならばアプリでレイアウトを変更する。
*7 4つのビュー状態については、「WinRT/Metro TIPS:ビューの切り替えを実装するには?[Win 8]」を参照。
さらに詳しく見ていこう。Win 8.1では、画面のサイズと解像度によるが、ストア・アプリを3つ以上並べられるようになった(次の画像)。
上の画像で並んでいる4つのアプリは、どれも対等である。Win 8ストア・アプリでは、広い面積を占めているメインとなるアプリ(=主)と、左右どちらかの端に付随するスナップ状態のアプリ(=従)という主従関係があり、設定チャームの操作対象は主アプリに限られていた。Win 8.1では、主従関係がなくなり、対等となる。設定チャームの操作対象は、現在アクティブ*8になっているアプリになる(次の画像)。
上の画像では、最も幅が狭いアプリに対して設定チャームが開いている。より広い幅を占めているほかのアプリと対等なのだ。
*8 「アクティブ」という用語で正しいかは分からない。「フォーカスを持っている」というべきかもしれない。見分け方は、アプリ間を隔てる細い黒帯に、アクティブなアプリの側には白く短い縦線が出るので、それで判断する。
プログラミングの観点から見ると、ApplicationViewState列挙体(Windows.UI.ViewManagement名前空間)や、それを取得するためのApplicationViewクラス(Windows.UI.ViewManagement名前空間)のValueプロパティは使えなくなる*9。警告を無視して使ってみても、次の画像のように、想定とは異なる値が返ってくることがある。
*9 Win 8.1では、まだ廃止されてはいない。次のようなDeprecated属性(Win 8.1で新設)が付けられており、ビルド時に警告が出る。 [Deprecated("ApplicationViewState may be altered or unavailable for releases after Windows 8.1. Instead, query for window layout sizes directly.", DeprecationType.Deprecate, 100859904)]
Win 8.1ではビュー状態がなくなる。ではどうするかというと、実際のビューのサイズや、ApplicationViewクラスに新設された新しい機能を利用する。
ビューの実際のサイズを取得するには、ページのSizeChangedイベント・ハンドラで、引数のSizeChangedEventArgsオブジェクト(Windows.UI.Xaml名前空間)を見る(次のコード)。
void MainPage_SizeChanged(object sender, SizeChangedEventArgs e)
{
var actualWidth = e.NewSize.Width;
var actualHeight = e.NewSize.Height;
// ……省略(画面に値を反映)……
}
また、ApplicationViewクラスには次のようなプロパティが新設された。
Win 8.1ストア・アプリでは、プログラムでこれらの値を見て、必要に応じてレイアウトを調整してほしい。新しいガイドライン「Guidelines for resizing windows to tall and narrow layouts」(本稿執筆時点では英語のみ)が参考になる。
Copyright© Digital Advantage Corp. All Rights Reserved.