2013-03-28 60 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 2013-11-27 22:19:03

+0

完美工作! :) – 2017-10-09 05:36:06

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

另请参阅https://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx用于设计'MenuItem'的样式。 – 2016-06-20 20:37:46