摇动手势 Instance/Event 似乎是 "global" 通过 WP8 应用程序

ShakeGestures Instance/Event appears to be "global" throught the WP8 App

所以,我有一个包含多个页面的 WP8 应用程序。我在我的应用程序中使用 ShakeGestures.dll 来检测抖动。

在不同的页面上 (MainPage.xaml 除外) 我有 独立的任务(涉及要更新的 UI ) 需要在达到 "MinimumRequiredMovesForShake" 时执行。

我面临的问题是,一旦我遍历页面并 return 到我的 MainPage.xaml 并摇动我的设备,摇动检测事件就会以某种方式被触发!

请注意MainPage.xaml页面不需要像前面提到的那样检测抖动。

当我反复摇动我的设备,从而多次满足 "MinimumRequiredMovesForShake" 时,单独页面上的所有任务开始执行!

根据我的说法,在我的应用程序中涉及的抖动检测事件以某种方式变成 "global",或者当我离开页面时 ShakeGestureHelper 实例需要 "destroyed"。

我使用的代码是:-

    public Page1()
    {
        InitializeComponent();


        ShakeGesturesHelper.Instance.ShakeGesture +=
        new EventHandler<ShakeGestureEventArgs>(Perform_Shakeevent); 
        ShakeGesturesHelper.Instance.MinimumRequiredMovesForShake = 10;
        ShakeGesturesHelper.Instance.Active = true;
    }

private void Perform_Shakeevent(object sender, ShakeGestureEventArgs e)
    {

        Dispatcher.BeginInvoke(() =>
        {
            //Task to be perfomed here.
        });
    } 

是的,如 XML 文档所示,ShakeGesturesHelper 是一个单例,您可以使用 ShakeGesturesHelper.Instance 访问单个实例。因此,您每次使用

时都会注册一个新的事件处理程序
ShakeGesturesHelper.Instance.ShakeGesture += ...

您应该或者每次离开页面时取消订阅,或者在每个事件处理程序中检查当前页面是否是处理程序感兴趣的一个。每次取消订阅可能会更干净,否则您还需要注意不要在下次调用构造函数时重新订阅。

坦率地说,这不是一个理想的设计,您可能想查看替代的摇动手势库,看看是否有更好的东西...