在WPF中自定义上下文菜单

13

我这里有一个项目,需要在我的WPF应用程序中自定义上下文菜单,在其中放置一个位于所有菜单项底部的按钮。

但是,如果我通过XAML添加按钮,它将显示为上下文菜单集合中的另一项,并且鼠标悬停高亮会作用于它。

我希望将上下文菜单调整为类似网格的样式,以便在其下方自定义样式。

你能想到如何实现这一点(最好是在XAML中)?

3个回答

31

在XAML中,这实际上非常简单。只需将其定义在您想要有上下文菜单的元素下面。

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

太好了!+1 我正在寻找这个。 - VisualBean
运行完美! :) - Yeasin Abedin

7

对于菜单项样式,其中含有按钮,您可以使用以下代码:

注意 - 将项目添加到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等设置样式。
希望能对您有所帮助!

4
您可以使用示例样式/模板(来自这里)的ContextMenu,并根据您的需要进行调整。
<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>

另请参阅 https://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx 以获取有关“MenuItem”样式的信息。 - Drew Noakes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接