【发布时间】:2014-03-28 05:07:08
【问题描述】:
我想修改 TopLevelHeader 使其不显示任何边框和悬停效果。为此,我使用以下 MSDN 示例覆盖了默认的 MenuItem 样式:
http://msdn.microsoft.com/en-us/library/ms747082(v=vs.90).aspx
我的问题是,使用这种样式时,子项以透明背景显示。我也尝试使用 aero.normalcolor.xaml 样式,但问题仍然存在,子项具有透明背景。
相关部分:
<Style x:Key="SimpleMenuItemBasic" TargetType="{x:Type MenuItem}">
<Style.Triggers>
<Trigger Property="Role" Value="TopLevelHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border Name="Border" >
<Grid>
<ContentPresenter ContentSource="Header" RecognizesAccessKey="True" />
<Popup Name="Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsSubmenuOpen}"
AllowsTransparency="True"
Focusable="False"
PopupAnimation="Fade">
<Border Name="SubmenuBorder" SnapsToDevicePixels="True"
Background="{DynamicResource WindowBackgroundBrush}"
BorderBrush="{DynamicResource SolidBorderBrush}"
BorderThickness="1">
<ItemsPresenter KeyboardNavigation.DirectionalNavigation="Cycle"
KeyboardNavigation.TabNavigation="Cycle"
Margin="0,0,0,1"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
<Setter TargetName="Popup" Property="PopupAnimation" Value="None"/>
</Trigger>
<Trigger Property="IsHighlighted" Value="true">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource NormalBrush}"/>
<Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
</Trigger>
<Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="True">
<Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="0,0,4,4"/>
<Setter TargetName="SubmenuBorder" Property="Padding" Value="0,0,0,3"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Grid.IsSharedSizeScope" Value="true"/>
</Trigger>
</Style.Triggers>
</Style>
以及用法示例:
<Menu>
<MenuItem Header="menuItem1" Style="{StaticResource SimpleMenuItemBasic}">
<MenuItem Header="subitem1" />
<MenuItem Header="subitem2" />
</MenuItem>
</Menu>
【问题讨论】: