删除细边框周围的菜单项 [英] Removing thin border around the menuitems
本文介绍了删除细边框周围的菜单项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我根据一些代码,我一旦接到一个自定义菜单。它看起来不错,但我会在如何去除周围菜单项的整个部分细的黑色边框的疯狂?哪里是这条边界/填充定义
由于任何WPF大师,可能帮助我?)
< ResourceDictionary中的xmlns =http://schemas.microsoft.com/winfx/2006/xaml/presentation
的xmlns:X =http://schemas.microsoft.com/winfx/ 2006 / XAML>
<的SolidColorBrush X:键=HighlightedBackgroundBrush颜色=#003466/>
<的SolidColorBrush X:键=MenuBackgroundBrush颜色=#003466/>
<的SolidColorBrush X:键=NormalBorderBrush颜色=#FFFFFFFF/>
<的SolidColorBrush X:键=SolidMenuFontBrush颜色=#FFFFFFFF/>
<的SolidColorBrush X:键=HighlightedText颜色=#FFFFFFFF/>
<风格X:键={X:类型菜单}的TargetType ={X:类型菜单}>
< setter属性=OverridesDefaultStyleVALUE =真/>
< setter属性=SnapsToDevicePixelsVALUE =真/>
< setter属性=高度值=25/>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型菜单}>
<边框背景={DynamicResource AppBackground}
BorderBrush ={DynamicResource AppBackground}
了borderThickness =1>
< StackPanel的ClipToBounds =真角度=垂直IsItemsHost =真/>
< /边框>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
<风格X:键={X:类型菜单项}的TargetType ={X:类型菜单项}>
< setter属性=OverridesDefaultStyleVALUE =真/>
< setter属性=模板>
< Setter.Value>
<的ControlTemplate的TargetType ={X:类型菜单项}>
< BORDER X:名称=边框了borderThickness =1>
<网格背景={DynamicResource AppBackground}>
< Grid.ColumnDefinitions>
< ColumnDefinition X:NAME =COL0了minWidth =17WIDTH =自动SharedSizeGroup =MenuItemIconColumnGroup/>
< ColumnDefinition WIDTH =自动SharedSizeGroup =MenuTextColumnGroup/>
< ColumnDefinition WIDTH =自动SharedSizeGroup =MenuItemIGTColumnGroup/>
< ColumnDefinition X:NAME =COL3/>
< /Grid.ColumnDefinitions>
<! - 如果需要的话ContentPresenter显示一个图标 - >
< ContentPresenter Grid.Column =0利润=4,0,6,0X:名称=图标VerticalAlignment =中心ContentSource =图标/>
<! - 雕文是,如果需要一个可检查的菜单勾选 - >
<电网Grid.Column =0能见度=隐藏利润=4,0,6,0X:NAME =GlyphPanelVerticalAlignment =中心>
<路径X:NAME =GlyphPanelpathVerticalAlignment =中心填充={TemplateBinding前景}数据=M0,2 L0,4.8 L2.5,7.4 L7.1,2.8 L7.1, 0 L2.5,4.6 Z的FlowDirection =LeftToRight/>
< /网格和GT;
<! - 内容菜单文字等 - >
< ContentPresenter Grid.Column =1
保证金={TemplateBinding填充}
X:NAME =HeaderHost
RecognizesAccessKey =真
ContentSource =头/>
<! - 内容菜单IGT - >
将; ContentPresenter Grid.Column =2
保证金=8,1,8,1
X:名称=IGTHost
ContentSource =InputGestureText
VerticalAlignment =中心/>
将;! - 它指向菜单的下一级箭头绘制路径 - >
<电网Grid.Column =3保证金=4,0,6,0X:NAME =ArrowPanelVerticalAlignment =中心>
<路径X:NAME =ArrowPanelPath的HorizontalAlignment =右VerticalAlignment =中心填充={TemplateBinding前景}数据=M0,0 L0,8 L4,4 Z/>
< /网格和GT;
将;! - 该弹出是向下展开的菜单或跨根据该项目的层次的主体 - >
<弹出ISOPEN ={绑定路径= IsSubmenuOpen,的RelativeSource = {的RelativeSource TemplatedParent}}布局=右X:NAME =SubMenuPopup调焦=假PopupAnimation ={DynamicResource {X:静态SystemParameters.MenuPopupAnimationKey}}>
< BORDER X:NAME =SubMenuBorderBorderBrush ={绑定路径=前景,的RelativeSource = {的RelativeSource AncestorType = {X:类型菜单}}}了borderThickness =1填充=2,2, 2,2>
<电网X:NAME =子菜单Grid.IsSharedSizeScope =真>
<! - StackPanel的保存菜单的孩子。这是由IsItemsHost = true设置 - >
< StackPanel的IsItemsHost =真KeyboardNavigation.DirectionalNavigation =周期/>
< /网格和GT;
< /边框>
< /弹出>
< /网格和GT;
< /边框>
<! - 这些触发器重新配置菜单项的四个安排通过角色展现不同层次的菜单 - >
< ControlTemplate.Triggers>
< - 角色= TopLevelHeader:这是一个菜单根菜单项;弹出式窗口向下展开 - >
<触发属性=角色VALUE =TopLevelHeader>
< setter属性=填充VALUE =6,1,6,1/>
< setter属性=放置VALUE =底的TargetName =SubMenuPopup/>
< setter属性=了minWidthVALUE =2的TargetName =COL0/>
< setter属性=宽度值=自动的TargetName =COL3/>
< setter属性=能见度VALUE =坍塌的TargetName =图标/>
< setter属性=能见度VALUE =坍塌的TargetName =GlyphPanel/>
< setter属性=能见度VALUE =坍塌的TargetName =IGTHost/>
< setter属性=能见度VALUE =坍塌的TargetName =ArrowPanel/>
< /触发>
< - 角色= TopLevelItem:这是从顶层没有任何子项子菜单项 - >
<触发属性=角色VALUE =TopLevelItem>
< setter属性=填充VALUE =6,1,6,1/>
< setter属性=能见度VALUE =坍塌的TargetName =ArrowPanel/>
< /触发>
< - 角色= SubMenuHeader:这是一个子菜单项不生孩子 - >
<触发属性=角色VALUE =SubmenuHeader>
< setter属性=DockPanel.DockVALUE =顶部/>
< setter属性=填充VALUE =0,2,0,2/>
< /触发>
< - 角色= SubMenuItem:这是有孩子的子菜单项 - >
<触发属性=角色VALUE =SubmenuItem>
< setter属性=DockPanel.DockVALUE =顶部/>
< setter属性=填充VALUE =0,2,0,2/>
< setter属性=能见度VALUE =坍塌的TargetName =ArrowPanel/>
< /触发>
<触发属性=IsSuspendingPopupAnimationVALUE =真正的>
< setter属性=PopupAnimationVALUE =无的TargetName =SubMenuPopup/>
< /触发>
<! - 如果没有图标是存在的,我们折叠图标内容 - >
<触发属性=图标VALUE ={X:空}>
< setter属性=能见度VALUE =坍塌的TargetName =图标/>
< /触发>
<! - 该GlyphPanel包含复选标记 - >
<触发属性=器isCheckedVALUE =真正的>
< setter属性=能见度VALUE =可见的TargetName =GlyphPanel/>
< setter属性=能见度VALUE =坍塌的TargetName =图标/>
< /触发>
<! - 使用系统颜色的菜单高亮显示和IsEnabled - >
<触发属性=IsHighlightedVALUE =真正的>
< setter属性=背景VALUE ={DynamicResource HighlightedBackgroundBrush}的TargetName =边框/>
< setter属性=前景VALUE ={DynamicResource HighlightedText}/>
< setter属性=BorderBrushVALUE ={DynamicResource NormalBorderBrush}的TargetName =边框/>
< /触发>
<触发属性=IsHighlightedVALUE =false的>
< setter属性=背景VALUE ={DynamicResource AppBackground}的TargetName =边框/>
< setter属性=前景VALUE ={DynamicResource SolidMenuFontBrush}/>
< setter属性=BorderBrushVALUE ={DynamicResource AppBackground}的TargetName =边框/>
< /触发>
<触发属性=IsEnabledVALUE =false的>
< setter属性=前景VALUE =浅灰色/>
< /触发>
< /ControlTemplate.Triggers>
< /控件模板>
< /Setter.Value>
< /二传手>
< /样式和GT;
< / ResourceDictionary的>
解决方案
..
<! - 弹出式窗口是向下展开的菜单或跨根据项目的不同级别的机构 - >
<弹出...>
< BORDER X:NAME =SubMenuBorder...填充=0> ...< /边框> ...< /弹出>
I based a custom menu on some code I once received. It looks OK, but I'm going crazy over how to remove the thin black border around the entire section of menuitems?! Where is this border/padding defined?
Thanks to any WPF guru that might help me with this :)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="HighlightedBackgroundBrush" Color="#003466" />
<SolidColorBrush x:Key="MenuBackgroundBrush" Color="#003466" />
<SolidColorBrush x:Key="NormalBorderBrush" Color="#FFFFFFFF" />
<SolidColorBrush x:Key="SolidMenuFontBrush" Color="#FFFFFFFF" />
<SolidColorBrush x:Key="HighlightedText" Color="#FFFFFFFF" />
<Style x:Key="{x:Type Menu}" TargetType="{x:Type Menu}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Height" Value="25"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Menu}">
<Border Background="{DynamicResource AppBackground}"
BorderBrush="{DynamicResource AppBackground}"
BorderThickness="1">
<StackPanel ClipToBounds="True" Orientation="Vertical" IsItemsHost="True"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border x:Name="Border" BorderThickness="1">
<Grid Background="{DynamicResource AppBackground}">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Col0" MinWidth="17" Width="Auto" SharedSizeGroup="MenuItemIconColumnGroup"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuTextColumnGroup"/>
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup"/>
<ColumnDefinition x:Name="Col3" />
</Grid.ColumnDefinitions>
<!-- ContentPresenter to show an Icon if needed -->
<ContentPresenter Grid.Column="0" Margin="4,0,6,0" x:Name="Icon" VerticalAlignment="Center" ContentSource="Icon"/>
<!-- Glyph is a checkmark if needed for a checkable menu -->
<Grid Grid.Column="0" Visibility="Hidden" Margin="4,0,6,0" x:Name="GlyphPanel" VerticalAlignment="Center">
<Path x:Name="GlyphPanelpath" VerticalAlignment="Center" Fill="{TemplateBinding Foreground}" Data="M0,2 L0,4.8 L2.5,7.4 L7.1,2.8 L7.1,0 L2.5,4.6 z" FlowDirection="LeftToRight"/>
</Grid>
<!-- Content for the menu text etc -->
<ContentPresenter Grid.Column="1"
Margin="{TemplateBinding Padding}"
x:Name="HeaderHost"
RecognizesAccessKey="True"
ContentSource="Header"/>
<!-- Content for the menu IGT -->
<ContentPresenter Grid.Column="2"
Margin="8,1,8,1"
x:Name="IGTHost"
ContentSource="InputGestureText"
VerticalAlignment="Center"/>
<!-- Arrow drawn path which points to the next level of the menu -->
<Grid Grid.Column="3" Margin="4,0,6,0" x:Name="ArrowPanel" VerticalAlignment="Center">
<Path x:Name="ArrowPanelPath" HorizontalAlignment="Right" VerticalAlignment="Center" Fill="{TemplateBinding Foreground}" Data="M0,0 L0,8 L4,4 z"/>
</Grid>
<!-- The Popup is the body of the menu which expands down or across depending on the level of the item -->
<Popup IsOpen="{Binding Path=IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Right" x:Name="SubMenuPopup" Focusable="false" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
<Border x:Name="SubMenuBorder" BorderBrush="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type Menu}}}" BorderThickness="1" Padding="2,2,2,2">
<Grid x:Name="SubMenu" Grid.IsSharedSizeScope="True">
<!-- StackPanel holds children of the menu. This is set by IsItemsHost=True -->
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle"/>
</Grid>
</Border>
</Popup>
</Grid>
</Border>
<!-- These triggers re-configure the four arrangements of MenuItem to show different levels of menu via Role -->
<ControlTemplate.Triggers>
<!-- Role = TopLevelHeader : this is the root menu item in a menu; the Popup expands down -->
<Trigger Property="Role" Value="TopLevelHeader">
<Setter Property="Padding" Value="6,1,6,1"/>
<Setter Property="Placement" Value="Bottom" TargetName="SubMenuPopup"/>
<Setter Property="MinWidth" Value="2" TargetName="Col0"/>
<Setter Property="Width" Value="Auto" TargetName="Col3"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="GlyphPanel"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="IGTHost"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
</Trigger>
<!-- Role = TopLevelItem : this is a child menu item from the top level without any child items-->
<Trigger Property="Role" Value="TopLevelItem">
<Setter Property="Padding" Value="6,1,6,1"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
</Trigger>
<!-- Role = SubMenuHeader : this is a child menu item which does not have children -->
<Trigger Property="Role" Value="SubmenuHeader">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="Padding" Value="0,2,0,2"/>
</Trigger>
<!-- Role = SubMenuItem : this is a child menu item which has children-->
<Trigger Property="Role" Value="SubmenuItem">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="Padding" Value="0,2,0,2"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="ArrowPanel"/>
</Trigger>
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
<Setter Property="PopupAnimation" Value="None" TargetName="SubMenuPopup"/>
</Trigger>
<!-- If no Icon is present the we collapse the Icon Content -->
<Trigger Property="Icon" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
</Trigger>
<!-- The GlyphPanel contains the CheckMark -->
<Trigger Property="IsChecked" Value="true">
<Setter Property="Visibility" Value="Visible" TargetName="GlyphPanel"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="Icon"/>
</Trigger>
<!-- Using the system colors for the Menu Highlight and IsEnabled-->
<Trigger Property="IsHighlighted" Value="true">
<Setter Property="Background" Value="{DynamicResource HighlightedBackgroundBrush}" TargetName="Border"/>
<Setter Property="Foreground" Value="{DynamicResource HighlightedText}"/>
<Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}" TargetName="Border"/>
</Trigger>
<Trigger Property="IsHighlighted" Value="false">
<Setter Property="Background" Value="{DynamicResource AppBackground}" TargetName="Border"/>
<Setter Property="Foreground" Value="{DynamicResource SolidMenuFontBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource AppBackground}" TargetName="Border"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="LightGray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
解决方案
...
<!-- The Popup is the body of the menu which expands down or across depending on the level of the item -->
<Popup ...>
<Border x:Name="SubMenuBorder" ... Padding="0">...</Border>...</Popup>
这篇关于删除细边框周围的菜单项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文