MenuItem可点击区域

时间:2017-05-26 19:37:30

标签: wpf menuitem

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

enter image description here

我尝试更改Padding样式的MarginMenuItem属性但没有成功。

如何能够点击MenuItem中的任何位置并能够触发绑定命令?

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

1 个答案:

答案 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>