Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象
Posted
技术标签:
【中文标题】Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象【英文标题】:Strange in ShakeGesture Library on Windows Phone Application 【发布时间】:2012-08-19 12:58:17 【问题描述】:我在使用 windows phone 摇动手势库时遇到了问题。 我构建了一个应用程序,它的震动声音会消失,它的工作很好,但奇怪的错误让我感到困惑。我有两页。这是我的单独代码:
void Instance_ShakeGesture1(object sender, ShakeGestureEventArgs e)
Stream stream = TitleContainer.OpenStream("Sounds/C.wav");
effect = SoundEffect.FromStream(stream);
effectInstance = effect.CreateInstance();
if (effectInstance.State != SoundState.Playing || effectInstance == null)
FrameworkDispatcher.Update();
effectInstance.Play();
else if (effectInstance.State == SoundState.Playing || effectInstance != null)
effectInstance.Stop();
void Instance_ShakeGesture2(object sender, ShakeGestureEventArgs e)
Stream stream = TitleContainer.OpenStream("Sounds/D.wav");
effect = SoundEffect.FromStream(stream);
effectInstance = effect.CreateInstance();
FrameworkDispatcher.Update();
if (effectInstance.State == SoundState.Stopped || effectInstance == null)
effectInstance.Play();
else if (effectInstance.State == SoundState.Playing || effectInstance != null)
effectInstance.Stop();
Instance_ShakeGesture1 是我在第 1 页摇动时播放音乐的程序,在第 2 页中播放 Instance_ShakeGesture2。 摇晃时出现了奇怪的错误,如果我摇动第 1 页 Instance_ShakeGesture1 将在之后执行,我尝试移至第 2 页并且我摇动它将首先执行 Instance_ShakeGesture1,然后再执行 Instance_ShakeGesture2。 当我尝试先摇动第 2 页而不是第 1 页时,问题也一样,Instance_ShakeGesture2 将首先执行,Instance_ShakeGesture2 将在第二个执行。 当我使用断点时,我知道这个错误。 有谁知道如何解决这个问题?谢谢之前:)
【问题讨论】:
【参考方案1】:当您导航到第二页时,可能事件 Instance_ShakeGesture1 仍处于活动状态。试试
Instance.ShakeEvent -= new EventHandler(Instance_ShakeGesture1);
在 Instance_ShakeGesture1 方法中。
【讨论】:
【参考方案2】:试试这个,它对我有用,
protected override void OnBackKeyPress(CancelEventArgs e)
e.Cancel = false;
ShakeGesturesHelper.Instance.ShakeGesture -= new EventHandler<ShakeGestureEventArgs>(Instance_ShakeGesture1);
因为您应该在离开第一页时删除事件。因此,您可以在按下后退键按钮时清除 hakeGestureEventArgs。
【讨论】:
欢迎您!我建议多解释一下您的解决方案,以便更容易理解您的建议以及为什么它可以解决问题,而不仅仅是删除代码。 你也应该在下面添加乔的答案【参考方案3】:好吧,我的错。不知道你需要它多次工作。
试试这个,如果效果好,请告诉我:
在OnNavigatedFrom
方法中编写您添加的同一行代码,然后从您当前的method('Instance_ShakeGesture2')
中删除它
【讨论】:
很抱歉,我也觉得是我的错,我忘了告诉你我对每个页面都使用了枢轴项,以及我如何在枢轴项中使用 OnNavigatedFrom 方法? 好的。在这种情况下,您可以在数据透视页面上使用SelectionChanged
事件并检查 SelectedIndex。 if(SelectedIndex==1)
使用 '-=' 代码删除您的 ShakeGesture1
事件并同样遵循 if(SelectedIndex==0)
以上是关于Windows Phone 应用程序上 ShakeGesture 库中的奇怪现象的主要内容,如果未能解决你的问题,请参考以下文章