私のプロジェクトには、2番目のウィンドウを開くメインウィンドウがあります。2番目のウィンドウ内にフレームがあり、フレーム内でナビゲーションサービスを開始します。また、2番目のウィンドウには、ユーザーがEscapeキーを押したときにMe.Closeを呼び出すKeyDownメソッドがあります。とにかく、2番目のウィンドウが閉じても、ナビゲーションサービスのページの1つにあるSystem.Windows.Threading.DispatcherTimer()は終了しません。2番目のウィンドウを閉じてnavigationservice内のDispatcherTimerを終了する方法についてのアイデアはありますか?
ありがとうマイク
ps誰かが私が持っているものを見たい場合は、ソースコードを提供できます...
(Hey 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
そして、2番目のウィンドウにはこれがあります:
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」を押すと、実際には2つの「ExitPage」ポップアップが表示されます)
ただし、問題があります。フォーカスをテキストボックスまたはコンボボックスに移動しない限り、ページはKeyDownイベントを取得しないようです。これを行わない場合、「Esc」キーを押すと、2番目のウィンドウのWindow_KeyDownが呼び出されます。ページのKeyDownイベント。これは、2番目のウィンドウが閉じられた後でもページのタイマーが停止しないことを意味します。ページの読み込み時にページのフォーカスを取得して、手動でフォーカスをページのコントロールに変更せずにKeyDownイベントを取得できるようにする方法を知っている人はいますか?
ありがとう!