2012-10-05 90 views
1

我正在創建一個包含選項卡旋轉的WPF選項卡控件270 °當我將鼠標懸停在選項卡之間時,它們顯示爲「跳躍」。我正在尋找一種方法來防止這種情況發生。選項卡應具有與Microsoft Office功能區UI中的選項卡相同的行爲(保持固定位置)。有沒有可能修改下面的XAML來達到這個目的?WPF TabControl選項卡「跳躍」

XAML:

<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的使用

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

在你的情況下,邊界元素本身,當你改變其BorderThickness因爲BorderThickness有助於該Border的「大小」改變大小,並在其內部控制不改變大小。

0

如果除去從IsMouseOver下面的線(境)觸發它停止跳動,並在視覺上它並沒有真正產生巨大的影響(在我看來)。

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

您好理查德,謝謝,但我確實需要在IsMouseOver上顯示邊框,在標籤項背景爲白色的情況下,我已經更新了相應的問題 –

+0

正確,那麼我的答案將不會如您所願說過。我會支持盧克,然後談談他所說的使邊框透明而不是將其厚度設置爲零。 – Richard