2011-11-23 2 views
3

XAML에서 만들려고하는 컨텍스트 메뉴에 문제가 있습니다. 그것은 매우 간단해야하며, 가끔 분리자를 가진 menuitem의 목록 일뿐입니다.컨텍스트 메뉴 배경 색칠

정확하게 배열 할 수 있었고 모든 항목이 올바른 위치에 있으며 이제는 스타일을 지정하고 테마를 지정합니다. 우리는 응용 프로그램 수준에서 스왑 된 많은 수의 명명 된 브러시를 노출하여 테마를 동적 스타일로 바인드하는 contextmenu, menuitem 및 separator 컨트롤의 스타일을 테마로합니다. 지금까지이 모든 것들이 늪지대였다.

필자가 보게되는 문제는 분리 기호에 대해 컨텍스트 메뉴의 왼쪽에 다른 메뉴와 동일한 배경을 표시하지 않는 공간 덩어리가 있는데, 이는 시각적으로 혼란 스럽습니다. 당신은 예를 볼 수 있고 우리의 더 어두운 주제들에 그것이 어떻게 악화되는지 이미지를 볼 수 있습니다!

Imgur

그리고 우리의 어두운 스타일

:

<Style TargetType="{x:Type ContextMenu}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="{DynamicResource HighlightBrush}"/> 
     </Trigger> 
     <DataTrigger Binding="{Binding ContextMenu.IsOpen,RelativeSource={RelativeSource Mode=Self}}" Value="True"> 
      <Setter Property="Background" Value="{DynamicResource HighlightBrush}"/> 
     </DataTrigger> 
    </Style.Triggers> 
    <Setter Property="Background" Value="{DynamicResource BackgroundLight}" /> 
    <Setter Property="Foreground" Value="{DynamicResource ForegroundText}" /> 
    <Setter Property="BorderThickness" Value="1" /> 
</Style> 

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Separator}"> 
       <Grid Margin="0,6,0,4" SnapsToDevicePixels="true"> 
        <Rectangle Margin="30,0,1,1" Height="1" Fill="{DynamicResource BackgroundLight}"/> 
        <Rectangle Margin="30,1,1,0" Height="1" Fill="{DynamicResource ContextMenuSeparator}"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

나는 아무 생각이 : 여기

Imgur

내가하려면 contextmenu을 위해 사용하고 스타일과 분리입니다 이 놈이 어디서 왔는지, 그리고 앱의 시각적 트리를 스누핑 할 때 나는 내가 가진 하얀 캔버스를 가진 ContentPresenter를 볼 수있다. 어떻게 제거할지 모르겠다. 이걸 본 사람 있어요?

+0

[메뉴 스타일 및 템플릿] (http://msdn.microsoft.com/en-us/library/ms752296.aspx) – sll

+0

@sll을 참조하십시오. 컨텍스트 메뉴의 ControlTemplate을 재정의 할 수 있다고 생각하고 있습니다. 그 예제에 표시된 것처럼 Border 속성에 내 테마 색상을 사용하고 해결할 수있는 것이 있습니까? –

+0

@ChesterHusk 온라인에서 볼 수있는 것부터, 그 공간을 없애기 위해 템플릿을 편집해야하는 것처럼 보입니다. – Rachel

답변

1

좋은 선생님, 당신은 MenuItem.SeparatorStyleKey Property 통해 원하는 동작을 얻을 수 있어야합니다.

<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" 
     TargetType="{x:Type Separator}"> 
    <Setter Property="MinHeight" Value="2"/> 
    <Setter Property="Margin" Value="2,4,2,3"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Separator}"> 
       <theme:ClassicBorderDecorator BorderStyle="HorizontalLine" 
               BorderBrush="{x:Static theme:ClassicBorderDecorator.ClassicBorderBrush}" 
               BorderThickness="1"/> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

당신은 ClassicBorderBrush의 배경 속성을 통해 해킹을 유도 할 수 있습니다 :

기본 스타일이의 라인을 따라 뭔가 것으로 보인다. (TemplateBinding?)