9

ScrollViewer が一番下、右などに到達したかどうかを検出するための最良のアプローチは何だろうと思っています。

マウスの PointerWheelChanged とタッチの ManipulationDelta の両方を使用することで、それを達成できると思います。これらのイベント ハンドラーでは、Horizo​​ntalOffset を記録して、スクローラーがいつ最後に到達するかを調べることができます。しかし、私はそれを行うためのより良い方法があると思います。

この記事を見つけました。しかし、圧縮の視覚的な状態は winrt では機能していないようです。CurrentStateChanging イベント メソッドが呼び出されていません。

別の記事もチェックしました。ただし、一般的なアプローチではなく、スクロールバーに対してのみ機能します。

この問題を解決する最善の方法を知っている人はいますか?

4

2 に答える 2

20

XAML:

<ScrollViewer
    x:Name="sv"
    ViewChanged="OnScrollViewerViewChanged">
    <Rectangle
        x:Name="rect"
        Width="2000"
        Height="2000"
        Fill="Yellow"
        Margin="10" />
</ScrollViewer>

コードビハインド:

private void OnScrollViewerViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    var verticalOffset = sv.VerticalOffset;
    var maxVerticalOffset = sv.ScrollableHeight; //sv.ExtentHeight - sv.ViewportHeight;

    if (maxVerticalOffset < 0 ||
        verticalOffset == maxVerticalOffset)
    {
        // Scrolled to bottom
        rect.Fill = new SolidColorBrush(Colors.Red);
    }
    else
    {
        // Not scrolled to bottom
        rect.Fill = new SolidColorBrush(Colors.Yellow);
    }
}
于 2012-10-02T05:22:37.113 に答える