1

スクロールビューアのズームインボタンに問題があります。

ビューアーの内部にはグリッドがあります。そして、そのグリッドの内側には、特定の順序で配置された一連の画像があります。理想的には、ボタンをクリックするだけで画像間を移動したいのですが、これを実現しました。ズームアウトボタンが機能していますが、ズームインすると...目的の場所までスクロールしません。画像の余白を使用してスクロールします。

私が抱えていると思われる問題は、スクロール可能な高さと幅が更新されないことです。

ズームアウトを押すと、次のように呼び出します。

zoomFactor = 1;
rosaryScroll.ZoomToFactor(zoomFactor);
rosaryScroll.InvalidateScrollInfo();
setRosaryState(rosaryState);

ロザリオ状態のスクロールを、そのマージンとスクロールビューアーのサイズを使用してビューアー内の特定の画像に設定し、画像をスクロールビューアーの中央に配置します。

rosaryScroll.ScrollToHorizontalOffset(
     (selectedBead.Margin.Left
     + (selectedBead.Width / 2)
     + rosaryScroll.Margin.Left / 2)
     * zoomFactor);
rosaryScroll.ScrollToVerticalOffset(
     (selectedBead.Margin.Top
     - (selectedBead.Height / 2)
     - rosaryScroll.Margin.Top / 2)
     * zoomFactor);

ズームアウトすると(zoomFactorは5でした)、スクロール可能な高さ/幅は細かく、簡単にスクロールできます。rosaryScroll.ScrollableHeight = 2336.0 double rosaryScroll.ScrollableWidth = 2584.0 double

しかし、ズームインすると(zoomFactorは1でした)、スクロール可能な高さ/幅は非常に小さいままですrosaryScroll.ScrollableHeight = 84.0 double rosaryScroll.ScrollableWidth = 0.0 double

では、ズーム呼び出し後にこのスクロール可能な高さと幅を更新するにはどうすればよいですか?InvalidateScrollInfo()は効果がないようです...

4

1 に答える 1

1

の使用をあきらめて、ScrollViewer操作イベントとレンダリング変換に基づいて独自のソリューションを展開することを検討します。お気づきのとおりScrollViewer、プログラムによる操作を簡単にするために作成されたものではなく、設計されていないカスタム動作を実装するのが難しくなります。ViewChangedプロパティはリクエストに応じてすぐには更新されないため、新しい値が表示される前に、いくつかのイベント(例)を待つ必要がある場合があります。私が書いた拡張機能を使用してオフセットとズーム係数の値をアニメーション化することもできますが、これらは少しハッキーであり、一部の人々は動作に問題があることに注意してください。

于 2013-02-09T05:50:17.810 に答える