2009-10-04 15 views
5

Menu'u uygulamaya çalışırken bir sorunla karşılaştım ve neler olduğunu anlayamıyorum. Menu denetimini kullanarak tek katmanlı bir menü yapmaya çalışıyorum.WPF Menuitem Sınırı

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

Ve MenuItem saniye boyunca tarzım aşağıdaki gibidir: İşte benim menü kodu

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

Ben menü öğeleri mouseover, görünen bir Border yoktur ve yapamam bu sınırın nasıl kaldırılacağını hayatım için öğren. Baska öneri?

cevap

5

Bir çok dahili WPF denetim stili için ControlTemplate'i geçersiz kılmanız gerekir. temelde sonra varsayılan kontrol görünüm geçersiz kılmak ve hissetmek Menü kontrolü için tüm stilleri, yerel kopyalarını ekleyerek vardır - onu nasıl kullanılacağına ilişkin talimatlar, Menü ControlTemplate sağlar

Here is the MSDN page.

sadece bu tarz eklemek gerekir senin sorunu çözmek için:

<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

Tamam, mantıklı. Teşekkürler! – Chrisc