这是一个突出问题的例子:
<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
,但第二个也是如此。有什么方法可以让点击成为同一个链的一部分吗?
答案 0 :(得分:0)
第一次点击会关闭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>
答案 1 :(得分:0)
如何使用 StaysOpenOnClick =&#34; True&#34; 。您可以在双击后关闭它:
<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 属性,您可以使用它。