自定义上下文菜单在WPF(Customizing Context Menu in WPF)

2019-08-18 02:22发布

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

但是,如果我是通过XAML添加按钮,它会出现在上下文菜单和收藏中的其他项目可以通过鼠标悬停亮点将采取行动。

我想有调整,以网格状样式,由此我可以自定义样式它下面的上下文菜单。

任何想法,我怎么能做到这一点(最好是在XAML)?

Answer 1:

它实际上是在XAML很简单。 只需把它定义为要具有上下文菜单元素。

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


Answer 2:

为了您的菜单风格与您可以使用下面的代码项目的按钮:

注-添加项目到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

从那里,你可以风格的MenuItemButton等。

希望能帮助到你!



Answer 3:

您可以使用例如样式/模板(从开始这里的) 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>


文章来源: Customizing Context Menu in WPF