C# 菜单项赢得';不显示上下文菜单

C# 菜单项赢得';不显示上下文菜单,c#,wpf,contextmenu,menuitem,itemcontainerstyle,C#,Wpf,Contextmenu,Menuitem,Itemcontainerstyle,我有一个按钮,当点击时,会显示一个上下文菜单。在这个上下文菜单中,我有菜单项。如果菜单项被左键单击,它应该执行一个命令。到目前为止,所有这些行为都可以通过以下代码正常工作: <Button.ContextMenu> <ContextMenu> <ContextMenu.ItemContainerStyle> <Style TargetType="{x:Type MenuItem}">

我有一个按钮,当点击时,会显示一个上下文菜单。在这个上下文菜单中,我有菜单项。如果菜单项被左键单击,它应该执行一个命令。到目前为止,所有这些行为都可以通过以下代码正常工作:

<Button.ContextMenu>
    <ContextMenu>
        <ContextMenu.ItemContainerStyle>
            <Style TargetType="{x:Type MenuItem}">
                 <Setter Property="Command" Value="{Binding StartContextMenuCommand}" />
                 <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
            </Style>
        </ContextMenu.ItemContainerStyle>
        <MenuItem Header="{x:Static Name:ContextMenuStartNames.1}"/>
        <MenuItem Header="{x:Static Name:ContextMenuStartNames.2}"/>
        <MenuItem Header="{x:Static Name:ContextMenuStartNames.3}"/>
        <MenuItem Header="{x:Static Name:ContextMenuStartNames.4}"/>
    </ContextMenu>
</Button.ContextMenu>

现在我希望每个菜单项都有一个带有一个菜单项的上下文菜单。由于左键单击调用菜单项上的命令,因此我希望右键单击行为显示以下ContextMenu:

<ContextMenu>
      <MenuItem Header="Set Default"></MenuItem>
</ContextMenu>


我试着在ItemContainerStyle中将其作为setter。我还尝试将其作为菜单项的上下文菜单,但除其他外,我的两次尝试均无效。我相信我可以想出一个简单的方法来做这件事,但我想保持它干净和简单。

也许我不理解你的问题(我的英语不是…任何特别的东西):D但如果你只想多层次上下文菜单,这应该行得通:

<ContextMenu>
    <MenuItem Header="Top Level 1">
        <MenuItem Header="Sub Level" />
        <MenuItem Header="Sub Level" />
    </MenuItem>
    <MenuItem Header="Top Level 2">
        <MenuItem Header="Sub Level" />
        <MenuItem Header="Sub Level" />
    </MenuItem>
</ContextMenu>

这是我目前解决这个问题的方法,但我一点也不喜欢。我希望尽可能避免代码隐藏

<ContextMenu.ItemContainerStyle>
      <Style TargetType="{x:Type MenuItem}">    
          <Setter Property="Command" Value="{Binding StartCommand}" />
          <Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Self}, Path=Header}" />
          <Setter Property="ContextMenu"> 
             <Setter.Value>
                <ContextMenu StaysOpen="True">
                    <MenuItem Header="Set As Default"/>
                </ContextMenu>
             </Setter.Value>
          </Setter>
          <EventSetter Event="PreviewMouseRightButtonUp" Handler="MenuItem_Click"/>
      </Style>
</ContextMenu.ItemContainerStyle>

史蒂文,谢谢你的意见。这将使我得到嵌套的菜单项。但我想有一个菜单项的上下文菜单。每一个菜单项,我都希望能够右键单击并弹出另一个上下文菜单。我不相信这会有我想要的行为。我想要一个菜单项菜单,在这里我可以右键单击菜单项并显示上下文菜单。您可以获得菜单项菜单,TreeView是一个嵌套菜单,每个TreeView项目都有自己的上下文菜单,您可以在任何事件上显示它。选中它可以工作,但TreeView项目不包含IsChecked。这就是我必须补充的行为。也许它可以工作,但它似乎不是我想要的控制。
 private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        ButtonContextMenu.StaysOpen = true;
        (sender as MenuItem).ContextMenu.IsOpen = true;
    }