0

グリッド ビューとコレクション ビュー ソースで SemanticZoom コントロールを使用しています。空のグループを選択 (「ジャンプ」) しようとするまで、すべて正常に機能しています。これにより、未処理の壊滅的な障害が発生します。

http://social.msdn.microsoft.com/Forums/nb-NO/winappswithcsharp/thread/6535656e-3293-4e0d-93b5-453864b95601

これを修正する方法があるかどうかは誰にもわかりません。できれば、空のグループを「許可」したいと思います。

ありがとう

4

1 に答える 1

0

さて、この問題に遭遇して修正しました。これはかなり古いスレッドであることは知っていますが、他の誰かがこれに遭遇した場合に備えて回答します。これが私がやった方法です。

問題は、グループDestinationItemにアイテムが必要なように設定されているようです。このグループが空の場合、これが問題になります。グループが他の塗りつぶされたグループの間にある場合、この問題は発生しませ。これは、グループの長さが 0 であるため、ターゲットに設定できないためです。それが最後にある場合(またはおそらく最初に、それを試していない場合)、これは問題を引き起こします。これは、マウスがビューの最後を過ぎたときに/がリストの最後のものをターゲットにするためです。GridViewListView

だから、それを解決する方法:

のイベント ハンドラを追加する必要があります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.ItemLastアイテムを含む First グループを処理することもできますが、これも非常に簡単です。の代わりにMyViewModel、 を挿入しますViewModel。の代わりにGroups、コレクション プロパティを挿入します。

これが役に立ち、幸せなコーディングになることを願っています!

于 2013-07-19T20:33:40.370 に答える