如何删除ContextMenu边框

问题描述

因此,我试图在我的ListBox的右键单击上显示按钮。

<ListBox Grid.Column="1" Margin="358,44,20,63" Name="scriptBox" Background="#FF282828" Foreground="White" SelectionChanged="ScriptBox_SelectionChanged" BorderThickness="0">
   <ListBox.ContextMenu>
      <ContextMenu>
         <MenuItem
            Template="{DynamicResource MenuItemTemplate}"
            Header="Delete" 
            Click="MenuItemDelete_Click" >
         </MenuItem>
      </ContextMenu>
   </ListBox.ContextMenu>

这是我的MenuItem模板。

<ControlTemplate targettype="{x:Type MenuItem}" x:Key="MenuItemTemplate">
   <Border x:Name="Border" Background="#FF282828"  Padding="30,5,30,5" BorderThickness="0" Margin="0">
      <ContentPresenter ContentSource="Header" x:Name="HeaderHost" RecognizesAccessKey="True" />
   </Border>
   <ControlTemplate.Triggers>
      <Trigger Property="IsHighlighted" Value="true">
         <Setter Property="Background" TargetName="Border" Value="#51544e"/>
      </Trigger>
   </ControlTemplate.Triggers>
</ControlTemplate>
<ItemsPanelTemplate x:Key="MenuItemPanelTemplate">
   <StackPanel Margin="-3,0" Background="White"/>
</ItemsPanelTemplate>
<Style targettype="{x:Type MenuItem}">
   <Setter Property="ItemsPanel" Value="{StaticResource MenuItemPanelTemplate}"/>
</Style>

一切都很好,但是按钮周围都有白色边框。

解决方法

您识别为白色边框的是ContextMenu本身,其中包含您的MenuItem。尝试添加更多按钮并更改Background中的BorderBrushContextMenu,您将看到。

<ContextMenu Background="Red" BorderBrush="Blue">

像这样改变画笔会导致这种结果,这很明显。

enter image description here

如果您仅为MenuItems创建了一个自定义控件模板,那么您可能也应该为ContextMenu创建一个自定义控件模板,如果仅设置画笔不符合您的要求。在示例中可以看到,默认控件模板中仍然存在一条垂直的白线,您可能想摆脱它。尽管它既不是默认模板,也不是完整模板,但您可以从此example开始。请查看此related post,以获取有关如何为ContextMenu提取默认控制模板的指导。