如何在应用程序按键上显示列表框上下文菜单?

时间:2013-08-19 08:56:04

标签: wpf listbox key contextmenu

我有上下文菜单的上下文菜单,当我按“应用程序密钥”它没有显示上下文菜单时,它必须像Windows一样工作。

<ListBox.ContextMenu>
   <ContextMenu Name="ZoneIformationList" StaysOpen="true" Background="WhiteSmoke">
      <ContextMenu.BitmapEffect>
         <BitmapEffectGroup/>
      </ContextMenu.BitmapEffect>
      <MenuItem Header="Edit" Name="EditNutritionContextMenu"  />
      <MenuItem Header="Remove" Name="RemoveNutritionContextMenu" />
   </ContextMenu>
</ListBox.ContextMenu>

1 个答案:

答案 0 :(得分:1)

您有多种选择可以实现目标。您可以创建一个Command来打开ContextMenu,然后使用该命令添加KeyBinding,并KeyGesture添加ALT + CTRL InputBindings KeyBinding你的主窗口。

您可以在KeyBinding Class页面上找到有关KeyGesture课程的详情,并在MSDN的KeyGesture Class页面找到PreviewMouseDown课程。

另一个选项是为ALT(或类似)事件添加处理程序,并监视是否按下CTRLContextMenu键,然后以编程方式启动{{1控制它们是否为:

public void ListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && 
(e.KeyboardDevice.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
    {
        // Open ContextMenu
    }
}

现在剩下的就是从代码中打开ContextMenu

if (element.ContextMenu != null )
{
    element.ContextMenu.PlacementTarget = element;
    element.ContextMenu.IsOpen = true;
}

如果ContextMenu放置不正确,您可以使用ContextMenu.HorizontalOffsetContextMenu.HorizontalOffset属性设置展示位置。