我有一个ContextMenu
,我将子菜单绑定到一组自定义对象。点击我发送一个带有绑定对象的命令作为参数:
<ContextMenu>
<MenuItem Header="Launch" ItemsSource="{Binding Profiles}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Command="{Binding DataContext.LaunchProfileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}"
CommandParameter="{Binding}">
<MenuItem.Style>
<Style TargetType="MenuItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<local:ProfileView IconSize="24" NameFontSize="10"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</MenuItem.Style>
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
<MenuItem Header="Exit" Command="{Binding ExitCommand}"/>
</ContextMenu>
问题在于MenuItem
的整个区域(“个人档案”集合中每个项目一个)不会触发绑定命令。只有红色区域才会触发命令:
我尝试更改Padding
样式的Margin
和MenuItem
属性但没有成功。
如何能够点击MenuItem
中的任何位置并能够触发绑定命令?
注意:红色区域对应于我的自定义视图:ProfileView
。此视图的边距设置为0.
答案 0 :(得分:1)
您将菜单项放在另一个菜单项中。你不需要这样做。使用ItemContainerStyle
:
<ContextMenu>
<MenuItem Header="Launch" ItemsSource="{Binding Profiles}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter
Property="Command"
Value="{Binding DataContext.LaunchProfileCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}}"
/>
<Setter
Property="CommandParameter"
Value="{Binding}"
/>
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate TargetType="{x:Type MenuItem}">
<local:ProfileView IconSize="24" NameFontSize="10"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="Exit" Command="{Binding ExitCommand}"/>
</ContextMenu>