2017-05-26 131 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