none
SurfaceListBox的滚动条事件如何知道它已停止滚动? RRS feed

  • 问题

  • 在SurfaceListBox中,我添加了一些项,使它可以滚动,然后,我通过VisualTreeHelper.GetChild方法,一路找到了它的scrollViewer,并为其设置了ScrollChanged事件,此事件能触发,但是我需要知道它何时能停下来,为此,又设置了MouseUp事件,但发现它不起作用,于是再设置PreviewMouseUp事件,它能生效,但问题在于,PreviewMouseUp事件被触发了以后,由于滚动条有加速事件,所以ScrollChanged事件仍在运行,请问,如何能知道滚动条彻底停下来了,并获取它停下来后的VerticalOffset?

    代码如下:

    void CameraList_Loaded(object sender, RoutedEventArgs e)
    {
    var p = list.GetVisualChildsByType<ScrollViewer>().First();
    p.ScrollChanged += p_ScrollChanged;
    p.PreviewMouseUp += p_MouseUp;
    }

    void p_MouseUp(object sender, MouseButtonEventArgs e)
    {
    Console.WriteLine((sender as ScrollViewer).VerticalOffset+"完成");}

    void p_ScrollChanged(object sender, ScrollChangedEventArgs e)
    {
    Console.WriteLine(e.VerticalOffset); //此方法问题在于,不知道它什么时候停下来
    }

    打印出来的效果是这样的

    241.811918903919
    254.811918903919
    278.811918903919
    278.811918903919完成
    289.530136323467
    301.002546153287
    307.664598044617
    314.410438299761

    278.811918903919完成 是PreviewMouseUp触发的,但它触发后,ScrollChanged事件仍在继续触发

    请问有什么方法能知道scrollViewer停下来了吗?

    2013年12月27日 15:43

答案

全部回复