2010-01-06 57 views
0

我正在實現我自己的假TabControl看起來像IE8標籤(我知道tabcontrol的其他實現)。在模板中觸發導致錯誤的渲染

我的TabControl派生自Selector,而我的TabItem派生自ContentControl。 當選擇一個選項卡時,我將IsSelected(依賴項屬性)設置爲true。 我Trigger看起來是這樣的:

<Trigger Property="IsSelected" Value="true"> 
    <Setter Property="Margin" Value="0,0,0,0"/> 
</Trigger> 

默認餘量爲我TabItem是0,2,0,0。換句話說,未選中的TabItem應該與選中的有一點偏差。 我已經嘗試在相反的情況下使用高度來代替。結果是,所選的TabItem似乎被剪裁而不是改變邊距。 我得到正確的視覺當屬性上直接設置標籤,即:

<local:TabItem IsSelected="true"/> 

我已經嘗試沒有成功無效Arrange,在我IsSelected依賴屬性VisualMeasure

我在這裏錯過了什麼?

編輯:

這裏是爲TabItem完整的風格(風格部分採用了這個項目:http://www.codeproject.com/KB/WPF/WpfTabControl.aspx):

<Style TargetType="{x:Type local:TabItem}"> 
    <Setter Property="Background" Value="{Binding Path=TabItemNormalBackground, RelativeSource={RelativeSource Self}}"/> 
    <Setter Property="SnapsToDevicePixels" Value="True"/> 
    <Setter Property="Height" Value="26"/> 
    <Setter Property="Margin" Value="0,2,0,0"/> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Setter Property="VerticalAlignment" Value="Bottom" /> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:TabItem}"> 
       <Border CornerRadius="3,3,0,0" 
         Background="{TemplateBinding Background}" 
         BorderBrush="{StaticResource TabItemOuterBorderBrush}" 
         BorderThickness="1,1,1,0"> 
        <Border CornerRadius="3,3,0,0" 
         Background="{TemplateBinding Background}" 
         BorderBrush="{StaticResource TabItemInnerBorderBrush}" 
         BorderThickness="1,1,1,0"> 
         <Grid HorizontalAlignment="Stretch"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="*"/> 
           <ColumnDefinition Width="Auto"/> 
          </Grid.ColumnDefinitions> 
          <ContentPresenter Grid.Column="0" Content="{TemplateBinding Icon}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
          <ContentPresenter Grid.Column="1" 
            SnapsToDevicePixels="True" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Center" 
            RecognizesAccessKey="True"/> 
          <Button x:Name="PART_CloseButton" 
          Grid.Column="2" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" 
          Margin="5,0,5,0" 
          Style="{StaticResource CloseButtonStyle}" 
          Visibility="Collapsed" 
          /> 
         </Grid> 

        </Border> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Background" Value="{Binding Path=TabItemSelectedBackground, RelativeSource={RelativeSource Self}}"/> 
         <Setter Property="Margin" Value="0,0,0,0"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

如果沒有在XAML中看到整個佈局代碼,這真的很難回答。 – 2010-01-06 15:28:04

+0

我已經添加了上面的TabItem。我希望這足夠。 – risingape 2010-01-06 16:05:52

回答

0

沒關係。我在MeasureOverride中存儲了需要的​​Tabitems,並忘記在隨後的調用中清除它們。