2010-04-15 6 views
3

마우스가 메뉴 항목 (첫 번째 수준) 위에 있으면 3D 단추 효과가 표시됩니다. 어떻게 제거 할 수 있습니까?메뉴 항목 (WPF)의 "단추"효과를 제거하는 방법

감사합니다.


편집 :

없이 효과

<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 : bordereffect http://img408.imageshack.us/img408/6517/menuborder.png


편집 2 : 큰 힘으로

큰 ... 복잡성을 :(제공 여기

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

그리고는 스크린 샷입니다.

내 목적을 달성하기 위해 전체 메뉴 템플릿을 다시 정의해야합니다. 3D 효과는 MenuItem 자식 테두리 (Snoop으로 식별 됨)에 의해 주어지며, 마우스 오버시 BorderStyle이 올려 지도록 설정됩니다. 그 테두리 스타일이 <Style TargetType="MenuItem"> 요소 내부에 닿아 있을지 모르겠다. 어떤 의견이라도 대단히 감사하겠습니다.

+0

메뉴 XAML과 스크린 샷을 올릴 수 있습니다. –

+0

이제 WindowContainerStyle을 게시하십시오. 당신이해야 할 일은 WindowContainerStyle에있는 것보다 당신이 선호하는 모양을 가진 메뉴 및/또는 메뉴 항목을위한 새로운 스타일을 정의하는 것입니다. –

답변

2
<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을 참조하십시오.

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