2013-03-28 48 views
5

ここでは、すべてのメニューアイテムの下部にボタンが配置されるWPFアプリケーションでコンテキストメニューをカスタマイズする必要があるプロジェクトがあります。WPFでのコンテキストメニューのカスタマイズ

ただし、XAMLでボタンを追加すると、コンテキストメニューの別のアイテムとして表示され、マウスオーバーが強調表示されます。

グリッドのようなスタイルに合わせてコンテキストメニューを調整して、その下のスタイルをカスタマイズすることができます。

どのように私はこれを達成することができます(任意のアイデアは、XAMLが望ましい)?次のコードを使用することができます項目にあるボタンを使用して、メニュー項目のスタイルのために

答えて

15

実際にはXAMLではかなり簡単です。 コンテキストメニューを表示する要素の下に定義するだけです。

 <Border> 
      <Border.ContextMenu> 
       <ContextMenu> 
        <ContextMenu.Template> 
         <ControlTemplate> 
          <Grid> 
           <!--Put anything you want in here.--> 
          </Grid> 
         </ControlTemplate> 
        </ContextMenu.Template> 
       </ContextMenu> 
      </Border.ContextMenu> 
     </Border> 
+0

素晴らしい! +1がこれを探していた – VisualBean

+0

完全に働いた! :) –

4

注 - Headerへのアイテムの追加と同じMenuItemでそれを維持しますが、MenuItemに追加された場合にのみ、それがします新しいMenuItemとみなされます。

<ContextMenu> 
    <ContextMenu.Items> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 1"/> 
       <Button Content="Button 1" Margin="5"/> 
      </StackPanel> 
      </MenuItem.Header> 
     </MenuItem> 
     <MenuItem> 
      <MenuItem.Header> 
      <StackPanel> 
       <TextBlock Text="Item 2"/> 
       <Button Content="Button 2" Margin="5"/> 
       </StackPanel> 
      </MenuItem.Header> 
      </MenuItem> 
    </ContextMenu.Items> 
</ContextMenu> 

これは、結果ContextMenu次のようになります。

enter image description here

そこからあなたがMenuItemButtonなど

はそれが役に立てば幸いスタイルすることができます!

1

あなたはContextMenu用(hereから)例スタイル/テンプレートから始めて、あなたのニーズに合わせて調整することができます。

<Style TargetType="{x:Type ContextMenu}"> 
    <Setter Property="SnapsToDevicePixels" Value="True" /> 
    <Setter Property="OverridesDefaultStyle" Value="True" /> 
    <Setter Property="Grid.IsSharedSizeScope" Value="true" /> 
    <Setter Property="HasDropShadow" Value="True" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type ContextMenu}"> 
     <Border x:Name="Border" 
       Background="{StaticResource MenuPopupBrush}" 
       BorderThickness="1"> 
      <Border.BorderBrush> 
      <SolidColorBrush Color="{StaticResource BorderMediumColor}" /> 
      </Border.BorderBrush> 
      <StackPanel IsItemsHost="True" 
         KeyboardNavigation.DirectionalNavigation="Cycle" /> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="HasDropShadow" Value="true"> 
      <Setter TargetName="Border" Property="Padding" Value="0,3,0,3" /> 
      <Setter TargetName="Border" Property="CornerRadius" Value="4" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

また、 'MenuItem'をスタイリングするためのhttps://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspxを参照してください。 –

関連する問題