0

ScrollViewer の位置を保存して、ページに移動して戻る矢印を押しても元の位置に留まるようにする必要があります。

私は使用しています:

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            base.LoadState(navigationParameter, pageState);
            if (pageState != null && pageState.ContainsKey("ScrollerPosition"))
            {
                mainScrollViewer.ScrollToHorizontalOffset((double) pageState["ScrollerPosition"]);
            }
        }

protected override void SaveState(Dictionary<String, Object> pageState)
        {
            base.SaveState(pageState);
            pageState["ScrollerPosition"] = mainScrollViewer.HorizontalOffset;
        }

しかし、それは元の状態を復元していません。私は何を間違っていますか?(私は Windows 8 の初心者です!)

4

2 に答える 2

0

問題は、データがロードされる前に呼び出される可能性があります。LoadStateその場合、スクロールするコンテンツがないため、ScrollToHorizontalOffset呼び出しは効果がありません。

データをロードする方法について詳細がないため、具体的な推奨事項を作成することはできません. ただし、一般的な解決策は、スクロール位置を設定する呼び出しの前に、すべてのデータがロードされていることを確認することです。

于 2013-03-23T00:52:55.187 に答える
0

スクロール ビューアーを復元する場所は、Loaded イベントにあります。コンストラクターにハンドラーを追加します。

scrollViewer.Loaded += (sv,event) => ScrollViewerLoaded(sv, event);

(または代わりに XAML を介して)

のように状態を保存しますSaveState()。あなたが持っているように値をロードしLoadState()ますが、値を使用する代わりに、その Loaded イベントに到達するまですぐにキャッシュします:

void ScrollViewerLoaded(Object sender, RoutedEventArgs event)
{
    mainScrollViewer.ScrollToHorizontalOffset(cachedScrollPosition);
}
于 2014-07-08T20:48:23.637 に答える