2010-01-06 28 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,并忘记在随后的调用中清除它们。