WPF Menuitem Граница - PullRequest
       13

WPF Menuitem Граница

5 голосов
/ 04 октября 2009

Я столкнулся с проблемой при попытке реализовать Menu и не могу понять, что происходит. Я пытаюсь сделать однослойное меню, используя элемент управления Menu. Вот мой код меню:

<Menu DockPanel.Dock="Top" Height="22" Name="menu1" VerticalAlignment="Top" Background="#FF325170">
    <MenuItem Header="Featured" Style="{StaticResource menuItemStyle}" />
    <MenuItem Header="Search" Style="{StaticResource menuItemStyle}" />
</Menu>

И мой стиль для моих MenuItem таков:

<Style x:Key="menuItemStyle" TargetType="{x:Type MenuItem}">
  <Style.Triggers>
    <Trigger Property="MenuItem.IsMouseOver" Value="true">
      <Setter Property = "Foreground" Value="Red"/>
    </Trigger>
  </Style.Triggers>
</Style>

При наведении мыши на пункты меню появляется Border, и я не могу понять, как убрать эту границу. Есть предложения?

1 Ответ

5 голосов
/ 04 октября 2009

Для многих встроенных стилей управления WPF необходимо переопределить ControlTemplate.

Вот страница MSDN , которая предоставляет шаблон Control Menu, с инструкциями по его использованию - в основном вы вставляете локальные копии всех стилей для элемента управления Menu, которые затем переопределяют элемент управления по умолчанию смотреть и чувствовать.

Для решения вашей проблемы вы можете просто вставить этот стиль:

<Style x:Key="{x:Type Menu}" TargetType="{x:Type Menu}">
  <Setter Property="OverridesDefaultStyle" Value="True"/>
  <Setter Property="SnapsToDevicePixels" Value="True"/>
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Menu}">
        <!--Here is where you change the border thickness to zero on the menu-->
        <Border BorderThickness="0">
          <StackPanel ClipToBounds="True" Orientation="Horizontal"
                      IsItemsHost="True"/>
        </Border>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
...