【问题标题】:WPF ContextMenu disappears when clicked单击时 WPF ContextMenu 消失
【发布时间】:2014-08-11 09:25:18
【问题描述】:

我有一个 WPF 应用程序,并为网格添加了一个 ContextMenu。用户在网格上进行选择,然后;出现一个上下文菜单。我在 ContextMenu 上有一些文本框,用户可以在其中输入一些值,但如果用户单击 ContextMenu 本身(而不是在文本框内),对话框就会消失。我想防止这种情况发生,并尝试获取一些指示何时单击 ContextMenu 的事件。

private void CreateContextMenu()
{
  detectionInfoContextMenu = new ContextMenu(); //create an instance of the class     
   //selectionBoxCanvas.ContextMenu = detectionInfoContextMenu;
   playVideoGrid.ContextMenu = detectionInfoContextMenu;
   detectionInfoContextMenu.MouseDown += detectionInfoContextMenu_MouseDown;
}

void detectionInfoContextMenu_MouseDown(object sender, MouseButtonEventArgs e)
{
    if(e.LeftButton == MouseButtonState.Pressed)
    MessageBox.Show("You clicked me!");
}

我正在尝试获取鼠标按钮事件以确定是否单击了鼠标左键。这似乎在其他控件上效果很好,例如画布等,但似乎在 ContextMenu 上不起作用。我使用了错误的事件吗?

【问题讨论】:

  • 我认为你不应该在这种情况下使用上下文菜单。请改用Popup
  • 什么时候用哪个合适?
  • 在我看来,当它实际上是一个菜单时,您应该使用 ContextMenu - 一个操作列表(如打开、关闭、撤消等)。而 Popup 则适用于其他所有内容 - 输入、选择、一些自定义 UI。

标签: c# wpf contextmenu


【解决方案1】:

您可以使用StaysOpenOnClick 来防止关闭菜单:

<MenuItem StaysOpenOnClick="True">Test</MenuItem>

或者您使用 Popup,正如 Ivan Zub 在 cmets 中建议的那样。

这里是一个在菜单中带有TextBox 的示例:

<ContextMenu>
    <MenuItem StaysOpenOnClick="True">
        <MenuItem.Header>
            <TextBox Width="100" />
        </MenuItem.Header>
    </MenuItem>
</ContextMenu>

【讨论】:

  • 顺便说一句;我在 C# 中动态创建了 ContextMenu,但感谢 XAML 代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多