2017-05-26 11 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(「プロファイル」コレクション内の各項目に1つ)のない全領域がバインドされたコマンドをトリガすることです。唯一の赤い部分は、コマンドをトリガします:

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

ハイライトは、のMenuItemに動作を停止しましたが、それは、テンプレートコントロール(Mahapps)を使用することによって引き起こされることができますか? – Sturm

+0

@ Sturm右は、コントロールテンプレートがそれを処理し、コントロールテンプレートを置き換えました。代わりにHeaderTemplateを使用するように私のバージョンを更新しました。既存のコントロールテンプレートを完全に削除したいのであれば、新しいControlTemplateにいくつかのトリガーを付けてハイライトなどを処理する必要があります。 –

+0

スタイルトリガーを追加することでこれを解決できました: ''そして、 'Background =" {TemplateBinding Background} "' ' – Sturm

関連する問題