2017-04-03 27 views
1

나는 이미지 아래처럼 TabItem의와 함께 TabControl에 대한 스타일을 구현하기 위해 노력하고 있습니다 :을 TabControl와의 DropShadow 효과 TabItem의 WPF

  1. : enter image description here

    enter image description here

    는 스타일이 눈에 보이는 것보다해야 목록 항목

  2. TabControl의 흰색 배경 및 Dropshadow 효과가있는 선택된 TabItem.
  3. TabItem이 선택되어 있지 않으면 TabItem 텍스트 색이 회색으로 바뀌어야합니다. 내가 지금까지 달성 한 무엇

:

  1. TabSizeConverter 컨버터를 사용하여 동일한 크기와 TabItem의 항목을 수용 할 수있는 TabControl의 폭을 분할 가능.
  2. TabControl 및 TabItem을 사용하여 배경을 변경할 수 있습니다. 그러나 Dropshadow 효과를 얻을 수 없습니다.
  3. 다음은 TabItem에 내 스타일이다

<Setter Property="Padding" Value="0"/> 
<Setter Property="IsTabStop" Value="False"/> 
<Setter Property="Foreground" Value="{StaticResource color_MediumGray}"/> 
<Setter Property="FontSize" Value="34"/> 

<Setter Property="FontFamily" Value="Resources/Fonts/#HelveticaNeueMed" /> 

<Setter Property="Width"> 
    <Setter.Value> 


<MultiBinding Converter="{StaticResource tabSizeConverter}"> 
        `<Binding RelativeSource="{RelativeSource Mode=FindAncestor,` AncestorType={x:Type TabControl}}" /> 
        <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type TabControl}}" Path="ActualWidth" /> 
       </MultiBinding> 
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Border x:Name="Chrome" 
         BorderThickness="30,0" 
         BorderBrush="{StaticResource color_Transparent}" 
         Background="{StaticResource color_LightGray}" 
         Padding="0" Margin="0"> 
         <ContentPresenter ContentSource="Header" 
         HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
         VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="Selector.IsSelected" Value="True"> 
          <Setter TargetName="Chrome" Property="BorderThickness" Value="0"/> 
          <Setter TargetName="Chrome" Property="Background" Value="{StaticResource color_White}"/> 
          <Setter Property="Foreground" Value="{StaticResource color_Purple}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

사람이 나에게 큰 도움이 될 것 같은 스타일을 TabControl을 acheving 도움이 될 수있는 경우. 미리 감사드립니다.

+0

안녕하세요, 몇 가지 피드백을 얻을 좋을 것이다. – grek40

답변

0

스타일 (Style)은 눈에 보이는 것보다해야한다 :

  1. 목록 항목
  2. 을 TabControl 흰색 배경 및의 DropShadow 효과와 선택 TabItem의.
  3. TabItem이 선택되어 있지 않으면 TabItem 텍스트 색이 회색으로 바뀌어야합니다.
  1. 나는 이것은 단지 오타라고 가정? 흰색에

  2. 설정 TabControl.BackgroundTabItem.BorderThickness을 변경하지 마십시오는있는 TabControl에 그림자 효과를 설정 제로로 TabControl.BorderThickness 설정, 흰색에 TabItem.BackgroundTabItem.BorderBrush을 설정합니다. 탭 헤더 정렬의 경우 TabPanel.Margin의 쉬운 수정은 선택된 탭에 음수 여백을 사용하는 것입니다.

  3. 템플릿 트리거에서 TabItem.Foreground으로 재생하는 대신 ChromeTextBlock.Foreground을 설정하십시오.

일반적으로 테스트를 위해 색 상수를 시스템 색 이름으로 바꿨습니다. 또한 탭 항목 너비 문제를 다시 해결하지 않고 정적 너비를 할당했습니다.아, 그리고 내가 대신 폰트 자원 :)의 기본 글꼴을 사용

내 전체 샘플 : 어떤 설명이 필요한 경우 내 대답은 질문을 해결 여부

<Window.Resources> 
    <Style x:Key="itemStyle" TargetType="TabItem"> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Margin" Value="0"/> 
     <Setter Property="IsTabStop" Value="False"/> 
     <Setter Property="FontSize" Value="34"/> 
     <Setter Property="FontFamily" Value="Resources/Fonts/#HelveticaNeueMed" /> 
     <Setter Property="Width" Value="310"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <Border x:Name="Chrome" 
         BorderThickness="10,0" 
         BorderBrush="Transparent" 
         Background="LightGray" 
         TextBlock.Foreground="Gray" 
         Padding="0" Margin="0"> 
         <ContentPresenter ContentSource="Header" 
          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="Selector.IsSelected" Value="True"> 
          <Setter TargetName="Chrome" Property="BorderBrush" Value="White"/> 
          <Setter TargetName="Chrome" Property="Background" Value="White"/> 
          <Setter TargetName="Chrome" Property="Margin" Value="-2,0,-2,-1"/> 
          <Setter TargetName="Chrome" Property="TextBlock.Foreground" Value="Purple"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<Grid x:Name="grid1"> 
    <Grid MaxWidth="650" MaxHeight="600"> 
     <Border Background="Gray"> 
      <Border.Effect> 
       <BlurEffect/> 
      </Border.Effect> 
     </Border> 
     <TabControl BorderThickness="0" Margin="5" Background="White"> 
      <TabControl.Effect> 
       <DropShadowEffect /> 
      </TabControl.Effect> 
      <TabItem Header="Postpaid" Style="{StaticResource itemStyle}" HorizontalContentAlignment="Center"> 
       <WrapPanel> 
        <Rectangle Fill="Blue" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Green" Width="380" Height="180" Margin="10"/> 
        <Rectangle Fill="Blue" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Green" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Yellow" Width="180" Height="180" Margin="10"/> 
       </WrapPanel> 
      </TabItem> 
      <TabItem Header="Prepaid" Style="{StaticResource itemStyle}" HorizontalContentAlignment="Center"> 
       <WrapPanel> 
        <Rectangle Fill="Green" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Yellow" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Blue" Width="180" Height="180" Margin="10"/> 
        <Rectangle Fill="Green" Width="380" Height="180" Margin="10"/> 
        <Rectangle Fill="Blue" Width="180" Height="180" Margin="10"/> 
       </WrapPanel> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Grid>