0

我有带有上下文菜单的列表框,当我按下“应用程序键”时它没有显示上下文菜单,它必须像 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>
4

1 回答 1

1

对于如何实现目标,您有多种选择。您可以创建一个Command打开 的ContextMenu,然后将KeyBinding带有命令的 a 和 a KeyGestureof添加ALT + CTRLInputBindings主窗口的。

您可以从MSDN 的KeyBinding 类页面和KeyGesture 类页面中找到有关KeyBinding该类的更多信息。KeyGesture

另一种选择是为PreviewMouseDown(或类似的)事件添加处理程序并监视是否按下ALTCTRL键,然后以编程方式启动ContextMenu控件(如果是):

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
    }
}

现在剩下的就是打开ContextMenufrom 代码:

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

如果ContextMenu没有正确放置,您可以使用ContextMenu.HorizontalOffsetContextMenu.HorizontalOffset属性设置放置。

于 2013-08-19T14:34:29.680 回答