0

Windows ストア アプリケーションで scrollviewer を使用していますが、SetHorizo​​ntalOffset 関数を何度か呼び出した後、scrollviewer が水平スクロールを変更しません。縦スクロールでも同じです。誰もそれを操作する方法を知っていますか? オフセットの可視性のためだけの scrollviewer スクロールである可能性があります (ユーザーがオフセットを表示できることがわかっている場合、まったくスクロールしないことを意味します)

4

1 に答える 1

0

ScrollViewer のオフセットが 1 フレーム遅れているようです。

以下のコードがフレームごとに実行される場合、diffPrevDesiredActual は常に 0 です。つまり、 によって提供される値はChangeViewすぐには反映されません。

    ...
        var scrollPosition = /*some new value*/;

        MyScrollViewer.ChangeView(null, scrollPosition, null, true);

        var current = MyScrollViewer.VerticalOffset;
        var diffDesiredActual = scrollPosition - current;
        var diffPrevDesiredActual = previous - current;

        previous = scrollPosition;
    ...

    private double previous;

スクロール オフセットを変更したときに画面上で何もアニメーション化されていない場合は、何かが新しいフレームの描画をトリガーするまで、ScrollViewer が新しい値を表示しない可能性があります。この仮説を検証するには、フレームが常に描画されるように、無限のアニメーション (ProgressRing など) を追加してみてください。

于 2013-11-06T20:43:28.830 に答える