0

私はTabControlIE8タブのように見える独自の偽物を実装しています(タブコントロールの他の実装を認識しています)。

MyTabControlは から派生しSelector、 My は からTabItem派生しContentControlます。タブが選択されたら、IsSelected(依存関係プロパティ) を true に設定します。私Triggerはこのように見えます:

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

my のデフォルトのマージンTabItemは 0,2,0,0 です。つまり、選択されていないTabItems は、選択された s に対してわずかにオフセットする必要があります。これを逆にして、代わりに高さを使用してみました。その結果TabItem、マージンが変更されるのではなく、選択された s が切り取られたように見えます。プロパティがタグに直接設定されている場合、正しいビジュアルが得られます。つまり、次のようになります。

<local:TabItem IsSelected="true"/>

Arrangeを無効にしようとVisualMeasureましたが、IsSelected依存関係プロパティであまり成功しませんでした。

ここで何が欠けていますか?

編集:

の完全なスタイルは次の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>
4

1 に答える 1

0

どうでも。tabitems desiredsize を MeasureOverride に保存しましたが、その後の呼び出しでそれらをクリアするのを忘れていました。

于 2010-01-07T20:54:00.513 に答える