2017-01-13 43 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);

如果你只想要鼠标事件你可以忽略键盘的东西,但有几个键盘也有这些导航按钮。

相关问题