关闭WPF上下文菜单时如何识别双击

时间:2017-02-14 18:38:52

标签: wpf events click contextmenu double-click

这是一个突出问题的例子:

<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,但第二个也是如此。有什么方法可以让点击成为同一个链的一部分吗?

2 个答案:

答案 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 属性,您可以使用它。