2017-05-26 147 views
0

我有一个ContextMenu,其中我将一个子菜单绑定到一组自定义对象。在点击我发送一个命令绑定的对象作为参数:MenuItem可点击区域

 <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

我曾尝试没有成功改变MenuItem风格的PaddingMargin性能。

我该如何实现能够点击MenuItem中的任意位置并且能够触发绑定命令?

注意:红色区域对应我的自定义视图:ProfileView。此视图的边距设置为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> 
+0

高亮停止在工作的MenuItems,它可以通过使用模板控件(Mahapps)引起的? – Sturm

+0

@Sturm Right,控件模板处理它,并替换控件模板。我更新了我的版本以代替使用HeaderTemplate。如果你真的想完全消除现有的控件模板,你必须给你的新ControlTemplate一些触发器来处理突出显示等。 –

+0

我可以通过添加样式触发器来解决这个问题:''然后将我的控件放置在一个'Grid'中,背景为“{TemplateBinding Background}” – Sturm