在Windows Phone上获取ScrollViewer的滚动事件

5
问题: 如何在Windows Phone上获取ScrollViewer的滚动事件?
我有一个ScrollViewer,代码如下:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ScrollViewer x:Name="MyScroller">
        <StackPanel>
            <!-- ... -->
        </StackPanel>
    </ScrollViewer>
</Grid>

我需要在MyScroller滚动发生时触发事件:

// MyScroller.Scroll += // <-- "Scroll" event does not exist on ScrollViewer
MyScroller.MouseWheel += MyScroller_MouseWheel; // Does not fire on scroll
MyScroller.ManipulationDelta += MyScroller_ManipulationDelta; // Fires for pinch-zoom only
3个回答

12

当滚动 ScrollViewer 时,MouseMove 事件会触发:

public MainPage()
{
    InitializeComponent();

    MyScroller.MouseMove += MyScroller_MouseMove;
}

void MyScroller_MouseMove(object sender, MouseEventArgs e)
{
    throw new NotImplementedException();// This will fire
}

这并不直观,因为它被称为"鼠标"事件,但手机上没有鼠标。然而,触摸点相对于ScrollViewer容器确实会移动,这就是它能够处理滚动的方式。


1

谢谢,这对我需要的内容帮助很大。但愿它能够在没有Listbox的情况下工作,因为我在使用带有图片和自定义布局的Listbox时遇到了性能问题。 - Subcreation
如果您使用的不是 ListBox,例如 ScrollViewer 和带有 StackPanel 的 ItemsControl,请注意应用程序用于呈现 UI 的内存量 - 您可能需要使用 VirtualisingStackPanel 以避免过多的内存使用。 - Stuart

0

使用Mango,您可以像在示例项目中描述的那样监视“ScrollStates”可视状态的更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接