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 回答
3

对于UWP,我是这样的

<ScrollViewer Name="scroll" ViewChanged="scroll_ViewChanged">
    <ListView />
</ScrollViewer>

private void scroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    var scrollViewer = (ScrollViewer)sender;
    if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight)
        btnNewUpdates.Visibility = Visibility.Visible;
}

private void btnNewUpdates_Click(object sender, RoutedEventArgs e)
{
    itemGridView.ScrollIntoView(itemGridView.Items[0]);
    btnNewUpdates.Visibility = Visibility.Collapsed;
}
于 2016-05-25T07:58:51.250 回答