ContextMenu显示不到1秒

本文关键字:1秒 显示 ContextMenu | 更新日期: 2023-09-27 18:27:03

我想控制控件的上下文菜单何时显示。

这是我的代码:

void MyControl_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    if ( some condition .....)
    {

            this.Focus();
            contextmeun.PlacementTarget = this;
            contextmeun.IsOpen = true;

    }
}

然而,它只出现不到1秒,然后立即消失。为什么?

谢谢你的帮助!

ContextMenu显示不到1秒

可能是因为您正在聚焦上下文菜单所属的控件,然后显示上下文菜单,但是当父控件获得焦点时,上下文菜单将关闭。

尝试在Xaml中设置上下文菜单,以获得正确的行为

<MyControl>
    <MyControl.ContextMenu>
        <ContextMenu>
            <!-- Define context menu here -->
        </ContextMenu>
    </MyControl.ContextMenu>
</MyControl>

这可以以纯XAML形式完成,您所需要做的就是将上下文菜单的visibility与包含以下条件的bool属性绑定-

<YourControl>
  <YourControl.Resources>
     <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
  </YourControl.Resources>
  <YourControl.ContextMenu>
   <ContextMenu Visibility="{Binding IsEnable,
                Converter={StaticResource BooleanToVisibilityConverter}}">
      <MenuItem Header="MenuItem1"/>
      <MenuItem Header="MenuItem2"/>
      <MenuItem Header="MenuItem3"/>
    </ContextMenu>
  </YourControl.ContextMenu>
</YourControl>

这里IsEnable是一个普通的CLR属性,在它的getter中,您可以根据需要切换上下文菜单的可见性来获得条件的逻辑。。