views:

24

answers:

1

Hi,

I'm implementing my own fake tabcontrol to look like IE8-tabs (I'm aware of other implementations of tabcontrol).

My TabControl derives from Selector, and my TabItems derive from ContentControl. When a tab is selected i set IsSelected (a dependencyproperty) to true. My trigger looks like this:

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

The default margin for my tabitem is 0,2,0,0. In other words, unselected tabitems should have a slight offset to the selected. I've tried doing this in reverse, and using height instead. The result is that tabitems that are selected seems to be clipped instead of altering the margin. I get the correct visual when the property is set on the tag directly, i.e.:

<local:TabItem IsSelected="true"/>

I've tried invalidating Arrange, Visual and Measure in my IsSelected dependency property without much success.

What am I missing here?

Edit:

Here's the complete style for the tabitem (the style is partly based on this project: 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>
A: 

Nevermind. I stored the tabitems desiredsize in MeasureOverride, and forgot to clear them in subsequent calls.

risingape