MenuItem可点击区域

MenuItem clickable area

我有一个 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 的整个区域('Profiles' 集合中的每个项目一个)不会触发绑定命令。只有红色区域会触发命令:

我尝试更改 MenuItem 样式的 PaddingMargin 属性,但没有成功。

如何实现点击MenuItem中任意位置触发绑定命令?

注意:红色区域对应我的自定义视图:ProfileView。此视图的边距设置为 0。

您正在将一个菜单项放在另一个菜单项中。你不需要那样做。使用 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>