我正在使用Windows 8.1通用应用程序,并且所有页面都在“根”Frame对象的“内部”。
着陆页是主页,用户可以从5个不同的页面中进行选择。当用户转到其中一个页面时,该页面上有一个“主页”按钮,可以将它们带回主页。
我最近发现,如果鼠标上有一个后退按钮,它将返回到访问的最后一页。这种返回主页的方法绕过了应用程序所需的一些逻辑。
是否可以“禁用”鼠标上前进和后退按钮的任何操作?如果不可能,我可以捕获该事件并将其重定向到具有必要逻辑的方法吗?
谢谢,
扎克
答案 0 :(得分:0)
我认为您正在寻找导航服务的概念。
此MSDN Article应该可以帮助您管理向后导航。
答案 1 :(得分:0)
VK_XBUTTON1和VK_XBUTTON2。 这些是附加鼠标按钮的常量,通常分配给前进和后退导航。
如果您想立即处理X按钮消息,则使用WM_XBUTTONDOWN和WM_XBUTTONUP将它们发布到您的应用程序。
点击此处:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx
答案 2 :(得分:0)
编辑:我刚注意到这个问题是关于“通用应用”,这个例子适用于WinForms,但它可能有助于找到Universal或UWP应用的答案......
假设您已经在按钮上有两个事件处理程序,可以向后导航(class MyClass : public SomeLibraryClass
{
public:
MyObject* ptrToSomething;
mutable std::set<boost::thread::id> threadsIds;
mutable boost::mutex mutex;
MyClass(){
ptrToSomething = new MyObject[threadsNumber];
for(int i = 0; i < threadsNumber; ++i){
ptrToSomething[i] = new MyObject();
}
}
void myFunction() const override{
{
boost::thread::id id = boost::this_thread::get_id();
boost::mutex::scoped_lock scoped_lock(mutex);
threadsIds.insert(id);
std::set<boost::thread::id>::iterator iter = threadsIds.find(id);
int index = std::distance(threadsIds.begin(), iter);
myTempObject = &ptrToSomething[index];
}
// do something
}
}
)和向前导航(void NavigateBack(object sender, EventArgs e)
)
首先将此代码段添加到您的表单代码中:
void NavigateForward(object sender, EventArgs e)
然后转到设计器视图,浏览表单上的所有主要控件,并将PreviewKeyDown和MouseDown事件连接到相应的方法。
更好(未来证明)的方法是编写代码以递归方式连接事件,如下所示:
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;
}
}
使用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();
之后的某处调用该方法
如果您只想要鼠标事件,可以省略键盘内容,但有一些键盘也有这些导航按钮。