从我的页面导航后,WinRt App keyUp和keyDown事件无法正常工作

时间:2013-05-30 14:50:08

标签: c# .net winrt-xaml

我在页面上处理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事件发生了什么?

我为我糟糕的英语道歉。

1 个答案:

答案 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));
        }
    }