【问题标题】:Get scroll event for ScrollViewer on Windows Phone在 Windows Phone 上获取 ScrollViewer 的滚动事件
【发布时间】:2011-03-10 19:26:40
【问题描述】:

问题: 获取 Windows Phone 上 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

【问题讨论】:

    标签: events windows-phone-7 scroll scrollviewer windows-phone


    【解决方案1】:

    当 ScrollViewer 滚动时触发 MouseMove:

    public MainPage()
    {
        InitializeComponent();
    
        MyScroller.MouseMove += MyScroller_MouseMove;
    }
    
    void MyScroller_MouseMove(object sender, MouseEventArgs e)
    {
        throw new NotImplementedException();// This will fire
    }
    

    它不直观,因为它被命名为“鼠标”事件,并且手机上没有鼠标。但是,触摸点确实会相对于 ScrollViewer 容器移动,这就是它可以处理滚动的方式。

    【讨论】:

      【解决方案2】:

      没那么简单,不过这个问题里写了几个滚动检测机制:

      WP7 Auto Grow ListBox upon reaching the last item

      基本看一下OnListVerticalOffsetChanged的调用和使用方式。

      【讨论】:

      • 谢谢,这对于我需要的东西来说更进一步。但是,我希望它在没有列表框的情况下也能工作,因为我在使用带有图像和自定义布局的列表框时遇到了性能问题
      • 如果您使用的不是 ListBox - 例如 ScrollViewer 和带有 StackPanel 的 ItemsControl,那么请注意您的应用程序使用多少内存来呈现 UI - 您可能需要按顺序使用 VirtualisingStackPanel以避免过度使用内存。
      【解决方案3】:

      使用 Mango,您可以观察“ScrollStates”视觉状态的变化,如sample project 中所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        相关资源
        最近更新 更多