グリッド ビューとコレクション ビュー ソースで SemanticZoom コントロールを使用しています。空のグループを選択 (「ジャンプ」) しようとするまで、すべて正常に機能しています。これにより、未処理の壊滅的な障害が発生します。
これを修正する方法があるかどうかは誰にもわかりません。できれば、空のグループを「許可」したいと思います。
ありがとう
グリッド ビューとコレクション ビュー ソースで SemanticZoom コントロールを使用しています。空のグループを選択 (「ジャンプ」) しようとするまで、すべて正常に機能しています。これにより、未処理の壊滅的な障害が発生します。
これを修正する方法があるかどうかは誰にもわかりません。できれば、空のグループを「許可」したいと思います。
ありがとう
さて、この問題に遭遇して修正しました。これはかなり古いスレッドであることは知っていますが、他の誰かがこれに遭遇した場合に備えて回答します。これが私がやった方法です。
問題は、グループDestinationItem
にアイテムが必要なように設定されているようです。このグループが空の場合、これが問題になります。グループが他の塗りつぶされたグループの間にある場合、この問題は発生しません。これは、グループの長さが 0 であるため、ターゲットに設定できないためです。それが最後にある場合(またはおそらく最初に、それを試していない場合)、これは問題を引き起こします。これは、マウスがビューの最後を過ぎたときに/がリストの最後のものをターゲットにするためです。GridView
ListView
だから、それを解決する方法:
のイベント ハンドラを追加する必要がありますOnViewChangeStarted
。このハンドラでは、SemanticZoomViewChangedEventArgs
.
targetted
最初に行う必要があるのは、グループが空であるかどうかを確認することです。ここではカスタムGroup
クラスを使用してIEnumerable
いますが、その中に含まれるアイテムの数だけを知る必要があるという理由だけで、それを にキャストしました。Linq
の数を見つけることができますIEnumerable
。
using System.Linq;
private void Zoom_OnViewChangeStarted(object sender, SemanticZoomViewChangedEventArgs e)
{
var group = e.DestinationItem.Item as IEnumerable;
if (group != null && group.Count() == 0)
{
e.DestinationItem.Item = MyViewModel.Groups.Last(itemGroup => itemGroup.Count() > 0);
}
}
お気づきのように、次のステップは、アイテムを含むグループに を設定することですDestinationItem.Item
。Last
アイテムを含む First グループを処理することもできますが、これも非常に簡単です。の代わりにMyViewModel
、 を挿入しますViewModel
。の代わりにGroups
、コレクション プロパティを挿入します。
これが役に立ち、幸せなコーディングになることを願っています!