2009-10-04 16 views
5

Wpadłem na problem, próbując wdrożyć Menu i nie mogę dowiedzieć się, co się dzieje. Próbuję utworzyć jednowarstwowe menu za pomocą kontrolki Menu. Oto mój kod menu:MenuFormum WPF Border

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

A mój styl dla moich MenuItem s jest w następujący sposób:

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

Kiedy mouseover elementów menu, istnieje Border który pojawia się, a ja nie mogę wymyślić dla mnie życie, jak usunąć tę granicę. Jakieś sugestie?

Odpowiedz

5

Dla wielu wbudowanych stylów sterowania WPF, należy zastąpić ControlTemplate.

Here is the MSDN page, który dostarcza Menu ControlTemplate, wraz z instrukcjami, jak z niego korzystać - w zasadzie wstawiasz lokalne kopie wszystkich stylów do sterowania Menu, które następnie zastępują domyślny wygląd i sposób sterowania.

W celu rozwiązania problemu należy być w stanie 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> 
+0

Ok, to ma sens. Dzięki! – Chrisc