2012-10-05 4 views
1

회전하는 탭이 포함 된 WPF 탭 컨트롤을 만듭니다. ° 마우스를 탭 사이에 마우스를 가져 가면 "점프"하는 것처럼 보입니다. 이 문제가 발생하지 않도록하는 방법을 찾고 있습니다. 탭에는 Microsoft Office 리본 UI의 탭과 동일한 동작 (고정 된 위치에 있어야 함)이 있어야합니다. 이 문제를 해결하려면 아래 XAML을 수정할 수 있습니까?WPF TabControl tabs "jumping"

XAML : 당신이 IsMouseOver에서 아래 라인 (국경)을 제거하면

<Window x:Class="WpfApplication2.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" Height="350" Width="300" TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType" UseLayoutRounding="true"> 
    <TabControl TabStripPlacement="Left" BorderThickness="1,0,0,0"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="LayoutTransform"> 
        <Setter.Value> 
         <RotateTransform Angle="270"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Foreground" Value="#330033" /> 
       <Setter Property="FontSize" Value="9pt"/> 
       <Setter Property="Height" Value="22" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type TabItem}"> 
          <Grid> 
           <Border Background="White" Name="Border" BorderBrush="#A9A9A9" BorderThickness="0" CornerRadius="2,2,0,0"> 
            <Border Padding="2" BorderBrush="Transparent"> 
             <ContentPresenter x:Name="ContentSite" 
             VerticalAlignment="Center" 
             HorizontalAlignment="Center" 
             ContentSource="Header" 
             Margin="12,0,12,2"/> 
            </Border> 
           </Border> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="True"> 
            <Setter Property="Panel.ZIndex" Value="100" /> 
            <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" /> 
           </Trigger> 
           <Trigger Property="IsMouseOver" Value="True"> 
            <Setter Property="Panel.ZIndex" Value="100" /> 
            <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" /> 
            <Setter TargetName="Border" Property="Background" Value="White" /> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.ItemContainerStyle> 
     <TabItem Header="Tab item 1" /> 
     <TabItem Header="Tab item 2" /> 
     <TabItem Header="Tab item 3" /> 
    </TabControl> 
</Window> 

답변

1

가 나는 마우스를 설정하여 탭 위에 있지 않을 때 Border을 숨기기 위해 더 좋을 거라 생각 BorderBorderBrushTransparent에보다는 BorderThickness 제로에 설정. 환언

<Border Background="White" Name="Border" BorderBrush="#A9A9A9" BorderThickness="0" CornerRadius="2,2,0,0"> 

<Border Background="White" Name="Border" BorderBrush="Transparent" BorderThickness="1,1,1,0" CornerRadius="2,2,0,0"> 

하고 IsMouseOver 트리거에서 BorderThickness에 세터 대신

<Setter TargetName="Border" Property="BorderBrush" Value="#A9A9A9" /> 

를 이용해 변경.

BorderThicknessBorder의 '크기'에 기여하고 테두리 안의 컨트롤의 크기가 변경되지 않기 때문에 테두리 요소 자체의 크기를 변경하면 BorderThickness이 변경됩니다.

0

가 점프 중지하고 시각적으로 정말 (내 생각에) 큰 영향을 미치지 않습니다 트리거합니다.

<Setter TargetName="Border" Property="BorderThickness" Value="0,0,0,0" /> 
+0

안녕하세요. 리차드, 고맙지 만 IsMouseOver에 테두리가 표시되어야합니다. 탭 항목 배경이 흰색 인 경우 이에 따라 질문을 업데이트했습니다. –

+0

그렇다면 내 대답은 작동하지 않습니다. 고 밝혔다. 저는 루크에게 테두리를 투명하게 만드는 것에 대해 말한 것과 함께 그 두께를 0으로 설정하는 것보다 지원할 것입니다. – Richard