2017-01-13 6 views
0

私は作業中のWindows 8.1 Universal Appを持っており、すべてのページがルートフレームオブジェクトの「内側」にあります。マウスの「戻る」ボタンをキャプチャして何か他のことをさせるにはどうすればいいですか?

ランディングページはホームページで、5つの異なるページから選択できます。ユーザーがこれらのページのいずれかに行くと、そのページには「ホーム」ボタンがあり、ホームページに戻ることができます。

私は最近、マウスに戻るボタンがあると、最後に訪れたページに戻ることを発見しました。ホームページに戻るこの方法は、アプリケーションに必要なロジックをバイパスします。

マウスの前後ボタンの操作を「無効にする」ことはできますか?可能でない場合は、そのイベントをキャプチャして、必要なロジックを持つメソッドにリダイレクトできますか?

おかげで、
ザック

答えて

0

私はあなたがナビゲーションサービスのコンセプトを探していると思います。

このMSDN Articleは、あなたの後方ナビゲーションの管理に役立ちます。

+0

回答とリンクをありがとうございます。残念ながら、リンクはUWPアプリ用で、私はコードを "back request"ハンドラを取得しようとしましたが、8.1アプリでは利用できません。 – zachboy82

0

VK_XBUTTON1およびVK_XBUTTON2。 これらは追加のマウスボタンの定数です。これは、通常、前方および後方のナビゲーションに割り当てられます。

Xボタンのメッセージをすぐに処理したい場合は、WM_XBUTTONDOWNおよびWM_XBUTTONUPを使用してアプリケーションに送信されます。ここ

チェック:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx

+0

これは便利なリストですが、これらのイベントをキャプチャする方法に関する情報はありません。 – zachboy82

0

編集:私はちょうどこの質問は、「ユニバーサルアプリ」についてだったことに気づいたが、この例では、WinFormsのためですが、それは、ユニバーサルまたはUWPのアプリケーションのための答えを見つけるために役立つかもしれません...

転送(void NavigateBack(object sender, EventArgs e))すでに後方移動するためのボタン上の2つのイベントハンドラを持っていると仮定し、(void NavigateForward(object sender, EventArgs e)

まず自分のフォームのコードにこのスニペットを追加します。

private void HandlePreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.XButton1: 
      NavigateBack(sender, e); // call the back button event handler 
      break; 
     case Keys.XButton2: 
      NavigateForward(sender, e); // call the forward button event handler 
      break; 
    } 
} 

private void HandleMouseDown(object sender, MouseEventArgs e) 
{ 
    switch (e.Button) 
    { 
     case MouseButtons.XButton1: 
      NavigateBack(sender, e); // call the back button event handler 
      break; 
     case MouseButtons.XButton2: 
      NavigateForward(sender, e); // call the forward button event handler 
      break; 
    } 
} 

次に、デザイナービューに移動し、フォームのすべての主要なコントロールを実行し、PreviewKeyDownイベントとMouseDownイベントを対応するメソッドに関連付けます。

private void HookupNavigationButtons(Control ctrl) 
{ 
    for (int t = ctrl.Controls.Count - 1; t >= 0; t--) 
    { 
     Control c = ctrl.Controls[t]; 
     c.PreviewKeyDown -= HandlePreviewKeyDown; 
     c.PreviewKeyDown += HandlePreviewKeyDown; 
     c.MouseDown -= HandleMouseDown; 
     c.MouseDown += HandleMouseDown; 
     HookupNavigationButtons(c); 
    } 
} 

そして、あなたはマウスだけをしたい場合はHookupNavigationButtons(this);

InitializeComponent();後にどこかでそのメソッドを呼び出します。

より良い(将来性)の方法は、再帰的にこのようなイベントをフックアップするコードを記述することですあなたはキーボードのものを残すことができますが、そこにはこれらのナビゲーションボタンもあるキーボードがいくつかあります。

関連する問題