0

我在页面上处理 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 页。这是第 1 页和第 2 页。在 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 事件发生了什么?

我为我糟糕的英语道歉。

4

1 回答 1

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));
        }
    }
于 2013-06-21T10:16:11.397 回答