开发者

Trigger in template causes wrong rendering

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.Co开发者_运维问答lumnDefinitions>
                                <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>


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜