/ / WPF Menuitem Obramowanie - wpf, menu, wpf-controls, style, menuitem

Obramowanie menu WPF - wpf, menu, wpf-controls, style, menuitem

Napotkałem problem przy próbie wdrożenia a Menu i nie mogę dowiedzieć się, co się dzieje. Próbuję utworzyć menu jednowarstwowe za pomocą Menu kontrola. Oto mój kod 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>

I mój styl dla mnie MenuItems jest następujące:

<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>

Po najechaniu kursorem na pozycje menu pojawia się Border to się pojawia i nie mogę się zastanawiać, jak usunąć tę granicę. Jakieś sugestie?

Odpowiedzi:

5 dla odpowiedzi № 1

W przypadku wielu wbudowanych stylów sterowania WPF należy zastąpić obiekt ControlTemplate.

Oto strona MSDN który zapewnia Menu ControlTemplate, zinstrukcje, jak z niego korzystać - po prostu wstawiasz lokalne kopie wszystkich stylów kontrolki Menu, które zastępują domyślny wygląd i sposób sterowania.

Aby rozwiązać problem, powinieneś po prostu wstawić ten styl:

<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>