Триггер в шаблоне вызывает неправильный рендеринг - PullRequest
0 голосов
/ 06 января 2010

Я реализую свою собственную фальшивку 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 s должны иметь небольшое смещение к выбранным. Я попытался сделать это в обратном порядке, и вместо этого с помощью высоты. В результате, выбранные значения TabItem кажутся обрезанными вместо изменения поля. Я получаю правильное визуальное изображение, когда свойство установлено для тега напрямую, т. Е .:

<local:TabItem IsSelected="true"/>

Я пытался сделать недействительными Arrange, Visual и Measure в моем IsSelected свойстве зависимости без особого успеха.

Что мне здесь не хватает?

Edit:

Вот полный стиль для 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>

1 Ответ

0 голосов
/ 07 января 2010

Nevermind. Я сохранил желаемый размер табуляции в MeasureOverride и забыл очистить их при последующих вызовах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...