2017-01-13 71 views
0

我有一個Windows 8.1通用應用程序,我正在處理所有頁面都在「內部」根框架對象。如何捕獲鼠標「返回」按鈕並使其執行其他操作?

登錄頁面是主頁,用戶可以從5個不同的頁面中進行選擇。當用戶轉到其中一個頁面時,頁面上會有一個「home」按鈕,以便將它們帶回主頁面。

我最近發現,如果一個鼠標上有一個後退按鈕,它將返回到最後訪問的頁面。返回到主頁的這種方法繞過了應用程序所需的一些邏輯。

是否可以「禁用」鼠標上的前進和後退按鈕的任何操作?如果不可能,我可以捕獲該事件並將其重定向到具有必要邏輯的方法?

感謝,
扎克

回答

0

我認爲你正在尋找導航服務的概念。

而這個MSDN Article應該可以幫助你管理你的後退導航。

+0

謝謝你的答案和鏈接。不幸的是,這個鏈接是針對UWP應用程序的,我嘗試了代碼來獲取「後臺請求」處理程序,但它不適用於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))和遠期(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); 
    } 
} 

而且InitializeComponent();後某處調用該方法與HookupNavigationButtons(this);

如果你只想要鼠標事件你可以忽略鍵盤的東西,但有幾個鍵盤也有這些導航按鈕。

相關問題