Release Preview における GridView の問題点 (1)

 Consumer Preview 上で Visual Studio 11 Beta のテンプレートで生成したプロジェクトを動作させた場合 GridView や ListView の動作に問題がありました。
 前回、Release Preview 上で Visual Studio 2012 RC のテンプレートで生成したプロジェクトを使って問題が解決しているか確認し問題が解決していると判断しましたが、詳細な動きを調べてみたところ、まだ問題点がある事がわかりました。

 以降、Consumer Preview での問題点が Release Preview でどのように変わったかをまとめ、その中で Release Preview での問題点についても説明したいと思います。

マウスやキーボードでのスクロール

 Consumer Preview の GridView や ListView には、マウスのホイールでスクロールできない、キーボードでカレントアイテムを移動していっても追随してスクロールせずカレントアイテムが画面外に消えてしまうという問題点がありました。
 この件は、Release Preview で解決していて、正常にスクロールするようになっています。

アイテムの仮想化

 Consumer Preview では GridView や ListView の各アイテムが仮想化されておらず、常に全てのアイテムが生成されていました。
 この件については、詳細を確認してみると解決している部分と問題?が残っている部分があります。

 まず、グループを使っていない GridView や ListView(Split App テンプレートで生成した物が該当)については、問題なく仮想化されるようになっています。

 グループを使っている場合(Grid App テンプレートで生成した物が該当)は、仮想化が行われません。
 ただし、Grid App テンプレートで生成した xaml を見ると、コメントとしてグループ内のアイテムは仮想化されないといった事が書かれており、問題点というよりも、仕様上仮想化されないという扱いなのかもしれません。

マージンの設定

 Consumer Preview でスクロールの問題点等を解決するために、GridView や ListView を ScrollViewer の外に出してしまうと、マージンが適切に設定されなくなってしまうという問題がありました。
 Release Preview で ScrollViewer の外に出してもマージンが適切に設定されるようになったと思ったのですが、細かく見てみると問題がありました。

 Release Preview で GridView や ListView の Padding に指定した値が内部のアイテム全体のマージンとして使用されるようになったようですが、GridView の右側の値と ListView の下の値が有効になっていないようです。
 右や下のマージンは Padding に指定はされているのですが、動作を見る限り無視されています。

 Grid App の場合、右側にマージンが設定されているように見えますが、これはグループのマージンが有効になっているだけです。本来は左側と同じ間隔になるはずですが、左側と比べると狭くなってしまっています。

 Split App の場合、右側のマージンは完全になくなってしまっています。

 また、スナップ時の ListView の下側のマージンもありません。

 この問題については、スタイル定義等で対処できると思われますので、次回確認してみたいと思います。