2010-01-06 5 views
0

저는 가짜 인 TabControl을 IE8- 탭처럼 보이기 위해 구현하고 있습니다. (저는 tabcontrol의 다른 구현을 알고 있습니다).템플릿의 트리거가 잘못된 렌더링을 야기합니다.

TabControlSelector이고, TabItemContentControl입니다. 탭을 선택하면 IsSelected (종속 스키마)을 true로 설정합니다. 내 Trigger은 다음과 같습니다 : 내 TabItem에 대한

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

기본 마진은 0,2,0,0입니다. 즉, 선택되지 않은 TabItem은 선택 항목에 약간의 오프셋이 있어야합니다. 이 작업을 역순으로 수행하고 대신 높이를 사용하려고했습니다. 결과적으로 선택된 TabItem이 여백을 변경하는 대신 잘리는 것으로 보입니다. 속성이 직접 태그에 설정되어있는 경우 나는 많은 성공없이 내 IsSelected 종속성 속성에 Arrange, VisualMeasure을 무효화 시도했습니다

<local:TabItem IsSelected="true"/> 

:, 즉를 올바른 시각을 얻을.

무엇이 여기에 있습니까?

편집 :

<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의 전체 레이아웃 코드를 보지 않고도 대답하기가 어렵습니다. –

+0

위의 TabItem을 추가했습니다. 나는 그것이 충분하기를 바란다. – risingape

답변

0

신경 끄시 :

여기 (: http://www.codeproject.com/KB/WPF/WpfTabControl.aspx 부분적으로이 프로젝트를 기반으로하는 스타일)에 TabItem의 전체 스타일입니다. MeasureOverride에 tabitems desiredsize를 저장하고 후속 호출에서이를 삭제하는 것을 잊었습니다.

관련 문제