如何去除WPF菜单项的“按钮”效果

3
当鼠标悬停在菜单项(一级)上时,它会显示一个3D按钮效果。如何去掉这个效果?
谢谢。
编辑: 尝试过。
<Style TargetType="MenuItem">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="Transparent">
            <Setter Property="BorderThickness" Value="0">
        </Trigger>
    </Style.Triggers>
</Style>

没有任何效果。

菜单的XAML代码:

<Window x:Class="UCWPF.Window3"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:conv="clr-namespace:UCWPF.Converters"
    Title="Window3" Height="600" Width="600"
    Background="{StaticResource WindowBackgroundBrush}"
    >

<StackPanel Style="{StaticResource WindowContainerStyle}">
    <Menu>
        <MenuItem Header="New" Icon="{StaticResource ImageNew}" />
        <MenuItem Header="Open" Icon="{StaticResource ImageOpen}" />
        <MenuItem Header="Save" Icon="{StaticResource ImageSave}" />
        <MenuItem Header="Export" Icon="{StaticResource ImageExport}" />
    </Menu>
...

这是截图: 边框效果 http://img408.imageshack.us/img408/6517/menuborder.png
编辑2: 拥有强大的力量就意味着有很大的复杂性:(。
看起来整个菜单模板都应该重新定义才能达到我的目的。3D效果是由一个MenuItem子边框(用Snoop标识)给出的,当鼠标悬停时,它的BorderStyle设置为raised。我不知道那个边框样式是否可以在<Style TargetType="MenuItem">元素内进行更改,任何反馈将不胜感激。

请发布您的菜单XAML和截图。 - Kent Boogaart
现在发布WindowContainerStyle。你需要做的是为菜单和/或菜单项定义一个新样式,以便拥有您喜欢的外观,而不是使用WindowContainerStyle中的任何内容。 - Wallstreet Programmer
2个回答

3
<MenuItem Header="Menu...">
            <MenuItem Header="(none)"/>
            <Separator/>

            <MenuItem>
                <MenuItem.Template>
                    <ControlTemplate>
                        <ItemsControl ItemsSource="{Binding Items}">
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <MenuItem Header="{Binding .}"/>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </ControlTemplate>
                </MenuItem.Template>
            </MenuItem>
        </MenuItem>

这实际上是一个非常好的和简单的解决方案,用于修改菜单。 - Felix K.

3
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Style.Triggers>
  <Trigger Property="Role" Value="TopLevelHeader">
    <Setter Property="Template" Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}"/>
    <Setter Property="Grid.IsSharedSizeScope" Value="true"/>
  </Trigger>
</Style.Triggers>

  <ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
<Border Name="Border" >
  <Grid>
    <ContentPresenter
      Margin="6,3,6,3"
      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 NormalBrush}"
        BorderBrush="{StaticResource SolidBorderBrush}"
        BorderThickness="1" >
        <ScrollViewer CanContentScroll="True"
          Style="{StaticResource MenuScrollViewer}">
          <StackPanel
          IsItemsHost="True"
          KeyboardNavigation.DirectionalNavigation="Cycle" />
        </ScrollViewer>
      </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="{StaticResource NormalBrush}"/>
    <Setter TargetName="Border" Property="BorderBrush" Value="Transparent"/>
  </Trigger>
  <!--Snippettoplevelheader-->
  <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>
  <!--/Snippettoplevelheader-->
  <Trigger Property="IsEnabled" Value="False">
    <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
  </Trigger>
</ControlTemplate.Triggers>

当鼠标悬停在菜单上方时,触发器IsHighlighted定义了样式。如果删除触发器,则移动鼠标到顶部菜单上方时不会显示任何内容。

有关更多控件样式示例,请参见http://msdn.microsoft.com/en-us/library/ms771597%28VS.85%29.aspx


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