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
样式的 Padding
和 Margin
属性,但没有成功。
如何实现点击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>
我有一个 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
样式的 Padding
和 Margin
属性,但没有成功。
如何实现点击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>