【发布时间】:2010-12-17 04:14:55
【问题描述】:
相关问题(详情)
Tunneling events and ContextMenu
我有一个 WPF 画布,我关联了一个 ContextMenu..
这很酷。现在我必须对 Right DoubleClick 执行一些操作...
事实上,我从来没有收到鼠标右键 ClickCount == 2...
怎么办?
我需要在简单(右键)单击时显示 ContextMenu,并执行 Action2 OnRightDoubleClick..
protected override void OnPreviewMouseRightButtonUp(MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
#region SINGLE CLICK
stillSingleClick = true;
Thread thread = new Thread(
new System.Threading.ThreadStart(
delegate()
{
Thread.Sleep(System.Windows.Forms.SystemInformation.DoubleClickTime);
this.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new Action(
delegate()
{
if (stillSingleClick)
{
base.OnPreviewMouseRightButtonUp(e);
}
stillSingleClick = false;
}
));
}
));
thread.Start();
#endregion SINGLE CLICK
}
else if (e.ClickCount == 2)
{
stillSingleClick = false;
base.OnPreviewMouseRightButtonUp(e);
}
}
【问题讨论】:
-
上下文菜单不会作为 WM_RBUTTONUP 的结果显示,而是作为 WM_CONTEXTMENU 的结果显示。这样做的原因是允许键盘(Shift+F10 或上下文菜单键)调用上下文菜单。无法区分从键盘或鼠标调用的 WM_CONTEXTMENU。如果要指定行为,则必须放弃键盘功能。我强烈建议保持“正常”行为,而不是右键双击,而是使用其他一些机制,例如 Ctrl+左键。
-
@Tergiver:谢谢。见stackoverflow.com/questions/4464936/…
-
我没有仔细阅读这个问题。我只是假设 ClickCount="1" 语句中的代码是一些操作,但现在我看到它与我提供的答案基本相同。我的错.. 已删除答案
标签: .net wpf mouse click double-click