在我的项目中,我有一个打开第二个窗口的 MainWindow。在第二个窗口内有一个框架,我在框架内启动了一个导航服务。同样在第二个窗口中,我有一个 KeyDown 方法,当用户按下 Escape 键时调用 Me.Close。无论如何,当第二个窗口关闭导航服务中的一个页面内的 System.Windows.Threading.DispatcherTimer() 时,它并没有结束。关于如何关闭第二个窗口并终止导航服务中的 DispatcherTimer 的任何想法?
谢谢迈克
ps 如果有人想看看我有什么,我可以提供源代码...
(嘿 EkoostikMartin - 这是对您的评论的跟进..)
所以我在这方面取得了一些进展。我已经添加:
AddHandler Me.KeyDown, AddressOf Page_KeyDown
AddHandler Me.PreviewKeyDown, AddressOf Page_PreviewKeyDown
到有计时器的页面。在页面内部,我定义了两种方法,例如:
Private Sub Page_KeyDown(sender As Object, e As KeyEventArgs)
If e.Key = Key.Escape Then
dTimer.Stop()
MessageBox.Show("Exit Page")
End If
End Sub
Private Sub Page_PreviewKeyDown(sender As Object, e As KeyEventArgs)
If e.Key = Key.Escape Then
dTimer.Stop()
MessageBox.Show("Exit Page")
End If
End Sub
第二个窗口有这个:
Private Sub Window_KeyDown(sender As System.Object, e As System.Windows.Input.KeyEventArgs)
'Escape Key Exits Program
If e.Key = Key.Escape Then
Me.Close()
End If
End Sub
因此,当我在导航服务中并使用计时器导航到页面并按“Esc”时,我收到消息“退出页面”,然后窗口关闭。这很好!
(我认为我不需要 KeyDown 和 PreviewKeyDown。当我按下“Esc”时,我实际上得到了两个“退出页面”弹出窗口)
但是有一个问题:除非我将焦点移动到文本框或组合框,否则页面似乎没有获得 KeyDown 事件,如果我不这样做,按下“Esc”键会调用第二个窗口的 Window_KeyDown 而不是页面的 KeyDown 事件,这意味着页面上的计时器即使在第二个窗口关闭后也不会停止。有谁知道在页面加载时获取页面焦点的方法,以便我可以在不手动将焦点更改为页面上的控件的情况下获取 KeyDown 事件?
谢谢!