2

のカスタム スタイルがありTabControlます。スタイルの一部として、選択した TabItem をコンテンツの上に表示します。現在、には設定TabPanelがないZIndexため、コンテンツの下に表示されます (望ましい動作)。

うまくいかないように見えるのは、選択した TabItem をコンテンツの上に表示することです。その設定Panel.ZIndexTabItem効果がないようです

<TabPanel x:Name="HeaderPanel" Panel.ZIndex="0" Grid.Column="0" Grid.Row="0" IsItemsHost="true" Margin="2,10,2,0" KeyboardNavigation.TabIndex="1" />

TabItem スタイル (重要なビット):

<Trigger Property="IsSelected" Value="true">
    <Setter Property="Panel.ZIndex" Value="1"/>
    <Setter Property="Background" TargetName="Bd" Value="#fff"/>
</Trigger>

これは、私が現在持っているもの (左) と欲しいもの (右) のイメージです。の右側の影は、テンプレート自体の周囲TabPanelから来ていることに注意してください。したがって、選択したものがその上に表示されるようにします!BorderContentPresenterTabControlTabItem

ここに画像の説明を入力ここに画像の説明を入力

PSボーナスは、丸みを帯びた左上隅と左下隅を作成する方法を誰かが知っている場合にマークしますTabPanel-それを機能させることをあきらめました

4

1 に答える 1

1

TabControlのControlTemplateを変更できませんでしたか?

問題は、デフォルトのControlTemplate ( http://msdn.microsoft.com/en-us/library/ms754137(v=vs.110).aspx ) にContentPresenterがTabPanelの後に宣言されており、上で効果的に強制されていることです。 Z オーダー。

簡単な解決策は、提供されたリンクからこれをコピーして貼り付け、TabPanelBorder要素の順序を逆にすることです ( BorderTabPanelの上に完全に配置され、ビューをブロックする可能性があるため、いくつかの調整が必要になる場合があります)。 )。

<Style TargetType="{x:Type TabControl}">

    <Setter Property="Template">

        <Setter.Value>

            <ControlTemplate TargetType="{x:Type TabControl}">

                <Grid KeyboardNavigation.TabNavigation="Local">

                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>

                    <!-- VisualStateManager stuff... -->

                    <Border Grid.Row="1" ... >

                        <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent"/>

                    </Border>

                    <TabPanel Grid.Row="0" ... />

                </Grid>

            </ControlTemplate>

        </Setter.Value>

    </Setter>

</Style>

TabPanelの角が丸い場合は、TabPanelクラスのControlTemplateを確認することをお勧めします。

于 2013-12-10T21:10:17.197 に答える