命令不适用于 MVVM 中的顶级 MenuItem
Command doesn't work on top level MenuItem in MVVM
如果 MenuItem 没有子 MenuItem,它工作正常,像这样:
<MenuItem Header="Open" Command="{Binding OpenCommand}"/>
但是,当我向其添加子菜单项时,该命令不起作用:
<MenuItem Header="Open" Command="{Binding OpenCommand}">
<MenuItem />
</MenuItem>
点击事件也不是这样的:
<MenuItem Header="Open" Click="MenuItem_Click">
<MenuItem />
</MenuItem>
当我尝试将命令添加到 header:
<MenuItem>
<MenuItem.Header>
<TextBlock>
<TextBlock.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding OpenCommand}"/>
</TextBlock.InputBindings>
Open
</TextBlock>
</MenuItem.Header>
<MenuItem />
</MenuItem>
命令有效,但子菜单项不显示。
任何帮助将不胜感激,请原谅我的 half-baked 英语。
如果您有子菜单 MenuItems
,则使用(用户期望的)点击事件来显示子菜单。要对子菜单打开做出反应,请使用事件 SubmenuOpened
.
如果您真的希望能够打开子菜单并单击 "Open",您可以使用这个 snipper,但我真的不建议它:
<MenuItem SubmenuOpened="MenuItem_OnSubmenuOpened"> <!-- handle sub menu opening if desired -->
<MenuItem.Header>
<Button Click="Button_Click">Open V2</Button> <!-- handle click on "Open" if desired; doesn't open sub menu! -->
</MenuItem.Header>
<MenuItem />
</MenuItem>
请注意,我已经在 "Open" 不是顶级菜单项的情况下对此进行了测试。
如果 MenuItem 没有子 MenuItem,它工作正常,像这样:
<MenuItem Header="Open" Command="{Binding OpenCommand}"/>
但是,当我向其添加子菜单项时,该命令不起作用:
<MenuItem Header="Open" Command="{Binding OpenCommand}">
<MenuItem />
</MenuItem>
点击事件也不是这样的:
<MenuItem Header="Open" Click="MenuItem_Click">
<MenuItem />
</MenuItem>
当我尝试将命令添加到 header:
<MenuItem>
<MenuItem.Header>
<TextBlock>
<TextBlock.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding OpenCommand}"/>
</TextBlock.InputBindings>
Open
</TextBlock>
</MenuItem.Header>
<MenuItem />
</MenuItem>
命令有效,但子菜单项不显示。
任何帮助将不胜感激,请原谅我的 half-baked 英语。
如果您有子菜单 MenuItems
,则使用(用户期望的)点击事件来显示子菜单。要对子菜单打开做出反应,请使用事件 SubmenuOpened
.
如果您真的希望能够打开子菜单并单击 "Open",您可以使用这个 snipper,但我真的不建议它:
<MenuItem SubmenuOpened="MenuItem_OnSubmenuOpened"> <!-- handle sub menu opening if desired -->
<MenuItem.Header>
<Button Click="Button_Click">Open V2</Button> <!-- handle click on "Open" if desired; doesn't open sub menu! -->
</MenuItem.Header>
<MenuItem />
</MenuItem>
请注意,我已经在 "Open" 不是顶级菜单项的情况下对此进行了测试。