我在页面上处理KeyDown和KeyUp事件的代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
Window.Current.CoreWindow.KeyDown += GameArea_KeyDown;
Window.Current.CoreWindow.KeyUp += GameArea_KeyUp;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
Window.Current.CoreWindow.KeyDown -= GameArea_KeyDown;
Window.Current.CoreWindow.KeyUp -= GameArea_KeyUp;
}
....
我的申请表中有2页。这是Page1和Page2。在Page1上,我有一个用于导航到Page2的按钮。在Page2上我有2个元素。它们是:button2,用于继续进行Page 1和GameArea元素。我正在使用MVVM和命令在页面上导航。
我的工作步骤:在Page1上,我点击了button1并导航到了Page2。在Page2上,我使用了GameArea元素中的KeyUp和KeyDown事件。完成一些工作后,我点击了button2并返回到Page1。在Page1上我再次单击button1并转到Page2,但KeyUp和KeyDown事件不起作用。我等了几秒钟(30-50)并在键盘上键入了一些键。之后,关键的上/下事件运作良好。
keyUp和keyDown事件发生了什么?
我为我糟糕的英语道歉。
答案 0 :(得分:0)
这是因为使用MVVM和命令导航后 - UI线程被阻止。 并且,如果我使用调度员进行导航,那么问题就解决了。
public void NavigateTo<TPage>(object parameter)
{
if (_rootFrame != null)
{
CoreDispatcher dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher;
dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() => _rootFrame.Navigate(typeof(TPage), parameter));
}
}