在谷歌浏览器中,我非常喜欢左后方按住“返回”按钮的功能,以获取完整的浏览历史记录。
在我的WPF应用程序中:对于带有上下文菜单的按钮,如何在按住鼠标左键的同时打开菜单(当然还有常规的右键单击)?
答案 0 :(得分:3)
我建议通过在那里启动计时器来处理MouseDown
事件。如果触发MouseUp
事件,则需要停止计时器。您可以使用DispatcherTimer
。然后,您可以设置一个时间,之后应该触发Timer_Tick
事件,您可以在其中执行您想要执行的操作。为了避免冒泡MouseDown
和MouseUp
事件的问题,我建议在窗口构造函数中添加两个处理程序,而不是在XAML中添加它们(至少在我的示例中没有触发事件)代码,所以我改变了)使用
button1.AddHandler(FrameworkElement.MouseDownEvent, new MouseButtonEventHandler(button1_MouseDown), true);
button1.AddHandler(FrameworkElement.MouseUpEvent, new MouseButtonEventHandler(button1_MouseUp), true);
此外,您需要在那里设置计时器:
在窗口类中添加一个字段:
DispatcherTimer timer = new DispatcherTimer();
并设置计时器,以及等待Timer_Tick
事件被触发的时间(也在窗口构造函数中):
timer.Tick += new EventHandler(timer_Tick);
// time until Tick event is fired
timer.Interval = new TimeSpan(0, 0, 1);
然后你只需处理这些事件就完成了:
private void button1_MouseDown(object sender, MouseButtonEventArgs e) {
timer.Start();
}
private void button1_MouseUp(object sender, MouseButtonEventArgs e) {
timer.Stop();
}
void timer_Tick(object sender, EventArgs e) {
timer.Stop();
// perform certain action
}
希望有所帮助。
答案 1 :(得分:0)
我认为你唯一的办法就是在按钮上手动处理MouseDown / Move / Up事件,在MouseDown发生后等待一段时间才能通过,如果在这段时间内没有MouseMove或MouseUp事件,然后手动显示ContextMenu。如果您显示上下文菜单,则必须注意该按钮之后不生成Click事件并执行默认点击操作。