【问题标题】:WPF - How to add onScroll Event to ListBox and Access the ScrollViewerWPF - 如何将 onScroll 事件添加到 ListBox 并访问 ScrollViewer
【发布时间】:2015-12-25 03:32:44
【问题描述】:

我在 XAML 中这样定义我的 ListBox:

<ListBox Name="myListBox" 
         HorizontalContentAlignment="Stretch" 
         ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
         ScrollViewer.ScrollChanged="OnScrollChanged" <- I want to create onScrollChanged event
         Grid.Row="0">
         ...
</ListBox>

然后在我的cs文件中,我定义了这个事件:

private void OnScrollChanged(object sender, ScrollChangedEventArgs e)
{

    var scrollViewer = (ScrollViewer)sender; //ERROR
    if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight)
        MessageBox.Show("This is the end");
}

我试图检测用户何时滚动到 ListBox 的最底部。但我收到错误,ListBox 无法转换为 Scrollviewer。如何获取滚动查看器?

谢谢

【问题讨论】:

    标签: c# wpf listbox scrollview


    【解决方案1】:

    在 XAML 中的 ListBox 周围添加一个 ScrollViewer,然后从那里订阅事件。

    <ScrollViewer ScrollChanged="OnScrollChanged">
        <ListBox Name="myListBox" 
                 HorizontalContentAlignment="Stretch"
                 ScrollViewer.HorizontalScrollBarVisibility="Hidden"
                 Grid.Row="0" />
    </ScrollViewer>
    

    代码隐藏可以保持不变。

    在您当前的代码中,您尝试将您的 ListBox(“发件人”)转换为 ScrollViewer,但它无法做到这一点,因此会引发异常。

    【讨论】:

    • 感谢格兰特,但在这种情况下,即使列表框为空,滚动查看器也会始终显示,并且会显示“这是结束”消息,这是我不想要的。我使用数据动态加载此列表,因此如果 ListBox 为空,则只有在加载数据并且用户滚动到底部时才显示任何消息。然后我将加载更多数据,这就是为什么我需要检测我的 ListBox 的滚动条何时滚动到末尾。
    • 就是这样。只需使用 myListBox.Items.Count() 而不是 Any()。谢谢格兰特,圣诞快乐
    猜你喜欢
    • 2011-05-07
    • 2011-04-17
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多