【问题标题】:WinRt App keyUp and keyDown events does not working after navigated from my page从我的页面导航后,WinRt App keyUp 和 keyDown 事件不起作用
【发布时间】:2013-06-21 18:16:11
【问题描述】:

我在页面上处理 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 和命令在页面上导航。

我的工作步骤:在第 1 页上,我单击按钮 1 并导航到第 2 页。在 Page2 上,我使用 GameArea 元素中的 KeyUp 和 KeyDown 事件。经过一番工作,我单击了 button2 并返回到 Page1。在 Page1 上,我再次单击 button1 并转到 Page2,但 KeyUp 和 KeyDown 事件不起作用。我等了几秒钟(30-50)并在键盘上键入了一些键。之后,按键向上/向下事件运行良好。

keyUp 和 keyDown 事件发生了什么?

我很抱歉我的英语不好。

【问题讨论】:

  • 您能否澄清您对问题的描述?对我来说,有点不清楚发生了什么,也许您应该在有序列表中列出重现问题所需的步骤。但是,代码对我来说似乎是正确的,你确定你的方法没有被调用吗?你是怎么测试的?您是否尝试在 GameArea_KeyDown 和 GameArea_KeyUp 方法中设置断点?
  • 是的,我做到了。我在 GameArea_KeyDown/KeyUp 方法中设置了断点,但导航后我没有输入到这些处理程序中。
  • 我的申请有 2 页。这是一个 Page1 和一个 Page2。在 Page1 我有一个 button1 用于导航到 Page2,在 Page2 我有一个 button2 用于导航到 Page1。
  • 我的工作步骤: 在第 1 页上,我单击按钮 1 并导航到第 2 页。在 Page2 上,我在一个元素 GameArea 上处理了 KeyUp 和 KeyDown 事件。完成一些工作后,我单击按钮 2 并返回到 Page1。在 Page1 上,我再次单击 button1 并转到 Page2,但 KeyUp 和 KeyDown 事件不起作用。
  • 也许,我想,是因为专注。因为在我点击了 button2 之后(button2 在 GameArea 元素的顶部),这个按钮就有了焦点。在我导航到 Page1 并返回到 Page1 之后,GameArea 元素的焦点就丢失了。

标签: c# .net winrt-xaml


【解决方案1】:

这是因为在使用 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));
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多