如何检测滚动查看器是否在winrt中到达底部

Sel*_*kie 9 c# xaml windows-runtime

我想知道什么是检测ScrollViewer是否到达底部,右边等的最佳方法.

我想我可以通过使用PointerWheelChanged用于鼠标和ManipulationDelta进行触摸来实现这一点.在这些事件处理程序中,我可以记录Horizo​​ntalOffset以找出滚动器何时到达结尾.但我认为可能有更好的方法来做到这一点.

我发现了这篇文章.但压缩视觉状态似乎不适用于winrt.不会调用CurrentStateChanging事件方法.

我还检查了另一篇文章.但它只适用于滚动条,而不是通用方法.

谁知道解决这个问题的最佳方法是什么?

Fil*_*kun 20

XAML:

<ScrollViewer
    x:Name="sv"
    ViewChanged="OnScrollViewerViewChanged">
    <Rectangle
        x:Name="rect"
        Width="2000"
        Height="2000"
        Fill="Yellow"
        Margin="10" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

代码背后:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)