【问题标题】:How to recognize double clicks when closing WPF context menu关闭WPF上下文菜单时如何识别双击
【发布时间】:2017-02-15 10:34:26
【问题描述】:
这是一个突出问题的示例:
<TextBlock Text="double click me" Width="150" Height="25"
ContextMenuOpening="TextBlock_ContextMenuOpening"
Mouse.MouseDown="TextBlock_MouseDown">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="test" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
当上下文菜单打开时,我双击 TextBlock。 TextBlock_MouseDown 的第一个命中有 e.ClickCount = 1,正如预期的那样,但第二个也是。有什么方法可以让点击成为同一个链的一部分?
【问题讨论】:
标签:
wpf
events
click
contextmenu
double-click
【解决方案1】:
第一次点击关闭ContextMenu,因此您应该能够处理ContextMenuClosing,然后比较关闭ContextMenu与再次点击TextBlock之间的总时间,例如:
DateTime dt;
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
if (DateTime.Now.Subtract(dt).TotalSeconds <= 0.3)
{
MessageBox.Show("double click detected!");
dt = DateTime.MinValue;
}
}
private void TextBlock_ContextMenuClosing(object sender, ContextMenuEventArgs e)
{
dt = DateTime.Now;
}
<TextBlock Text="double click me" Width="150" Height="25"
ContextMenuClosing="TextBlock_ContextMenuClosing"
Mouse.MouseDown="TextBlock_MouseDown">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="test" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
【解决方案2】:
如何使用 StaysOpenOnClick="True"。双击后关闭即可:
<TextBlock Text="double click me" Width="150" Height="25" >
<TextBlock.ContextMenu>
<ContextMenu Name="cm">
<MenuItem PreviewMouseDoubleClick="MenuItem_PreviewMouseDoubleClick" Header="test"
StaysOpenOnClick="True" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
在代码中:
private void MenuItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// ...
cm.IsOpen = false;
}
另外请注意,ContextMenu 中也有一个 StaysOpen 属性,您可以使用它。