在Flipview中处理PointerReleased事件

时间:2013-11-14 08:14:49

标签: c# windows-runtime windows-store-apps winrt-xaml

我正在尝试创建一个包含flipview的应用程序,当用户暂时没有与之交互时,该视图会自动翻转到下一页。使用基本的DispatcherTimer可以正常工作,当flipview的选择发生变化时,它会重新启动。

到目前为止一直很好,但我也不希望计时器在用户与flipview中的当前项目进行交互时运行,如listview或其他东西。我想我可以将PointerPressed和PointerReleased处理程序连接到页面,并在每次按下指针时停止计时器,并在释放指针时重新启动它。

这是有效的,除非指针位于flipview上:按下的处理程序被执行,但FlipView会吞噬所有其他指针事件,因此PointerReleased处理程序永远不会被执行。

我无法弄清楚如何让它发挥作用。在WPF中,我只是使用隧道事件,但整个概念似乎已经消失了WinRT?关于如何使其发挥作用的任何建议?

使用代码更新

不确定。我有一个包含flipview和dispatchertimer的页面:

public sealed partial class MainPage : Page
{
    private DispatcherTimer slideScrollTimer;

    public MainPage()
    {
        // Set up a timer that'll flip to the next page every 5 seconds.
        this.slideScrollTimer= new DispatcherTimer()
        {
            Interval = TimeSpan.FromSeconds(5)
        };

        slideScrollTimer.Tick += slideScrollTimer_Tick;
        slideScrollTimer.Start();
    }

    void slideScrollTimer_Tick(object sender, object e)
    {
        // When the timer runs out, go to the next page, or back
        // to the first.
        if (flipView.SelectedIndex < flipView.Items.Count - 1)
        {
            flipView.SelectedIndex++;
        }
        else
        {
            flipView.SelectedIndex = 0;
        }
    }

    private void flipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // restart the timer if someone flips to a different page
        if (this.slideScrollTimer != null)
        {
            this.slideScrollTimer.Start();
        }
    }
}

基本上我想要的是定时器在有人触摸应用程序时重置。我尝试使用AddHandler添加一个PointerPressed / PointerReleased处理程序,但是如果你不在flipview上,或者只是点击它而不是滚动它或操纵它的内容,它只会触发。

1 个答案:

答案 0 :(得分:0)

您可以使用UIElement.AddHandler来处理已在其他位置标记为已处理的事件。

  

为指定的路由事件添加路由事件处理程序,将处理程序添加到当前元素的处理程序集合中。将 processedEventsToo 指定为 true ,即使事件是在其他地方处理的,也要调用提供的处理程序。