[英]How do I capture mouse “back” button and cause it to do something else?
我有一個正在使用的Windows 8.1通用應用程序,並且所有頁面都在根Frame對象的“內部”。
登陸頁面是主頁,用戶可以從5個不同的頁面中進行選擇。 當用戶轉到這些頁面之一時,頁面上將帶有“主頁”按鈕,以將其帶回到主頁。
我最近發現,如果鼠標上帶有后退按鈕,它將回到上次訪問的頁面。 這種返回首頁的方法繞過了應用程序必需的一些邏輯。
是否可以“禁用”鼠標上的這些前進和后退按鈕的任何操作? 如果不可能,是否可以捕獲該事件並將其重定向到具有必要邏輯的方法?
謝謝,
扎克
我認為您正在尋找導航服務的概念。
而且,該MSDN文章應該可以幫助您管理向后導航。
VK_XBUTTON1和VK_XBUTTON2。 這些是其他鼠標按鈕的常量,這些常量通常分配給前進和后退導航。
如果要立即處理X按鈕消息,請使用WM_XBUTTONDOWN和WM_XBUTTONUP將它們發布到您的應用程序中。
在這里檢查: https : //msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx
編輯:我只是注意到,這個問題是關於“通用應用程序”的,此示例適用於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();
之后的某個地方調用該方法InitializeComponent();
與HookupNavigationButtons(this);
如果只希望發生鼠標事件,則可以省略鍵盤內容,但是那里有一些鍵盤也具有這些導航按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.