8

これは、WPF TabControl、TabItem、およびTabPanelに関する初心者向けの質問です。StackOVFに関連する質問があり、アプリで喜んで使用した回答があります。回答へのリンクとコードスニペットは次のとおりです。

WPF:TabControlの中央のTabItem

<TabControl>
    <TabControl.Resources>
        <Style TargetType="{x:Type TabPanel}">
            <Setter Property="HorizontalAlignment" Value="Center" />
        </Style>
    </TabControl.Resources>

    <TabItem Header="Test 1" />
    <TabItem Header="Test 2" />
    <TabItem Header="Test 3" />
    <TabItem Header="Test 4" />
</TabControl>

これは素晴らしいことですが、リソースとスタイルのものをより良い場所(スタイルシートなど)に移動したいと思います。私の最初の試みは<TabControl.Resources>タグをに移動することでした<Window.Resources>が、これは機能しませんでした。いくつかのバリエーションを試しましたが、機能しませんでした。これは私がいくらかうまくいくと期待した試みの例です:

<!-- Doesn't work as expected: -->
<Window.Resources>
    <Style TargetType="{x:Type TabPanel}">
        <Setter Property="HorizontalAlignment" Value="Center" />
    </Style>
</Window.Resources>

Webとmsdnを検索しても問題は解決しませんでしたが、代わりに2番目の(関連する)質問が残りました。実際にTabPanelとは何ですか、またTabControlとどのように関連していますか?

ヘルプやヒントをいただければ幸いです。

(編集:最後の例で、コードが機能しないとコメントしました。)

4

2 に答える 2

13

代替テキスト

TabControl は StackPanel のような一般的な Panel ではなく、特殊な TabPanel クラスを使用します。TabControl をいじると、パネルが一般的なパネルにはない多くのことを行うことがわかるからです。1 つは、複数の行でタブ ヘッダー項目を調整することです。もう 1 つの方法は、選択したタブアイテムのヘッダーが常に最後の行になるように、アイテムの行が再配置されることです。多分もっと活躍してると思う

ウィンドウリソースセクションにスタイルを配置してもうまくいかない理由を知りたいです。私の最初の反応は、試してみるまではうまくいくはずだというものでした。SOはコメントに画像を追加できないため、これを回答として追加しています。

于 2010-08-18T23:37:52.207 に答える
2

これを行うには、おそらく ControlTemplate を作成する必要があります。

私はまだ ControlTemplates にあまり詳しくありません。この例をハッキングしました: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.tabpanel.aspx

<Style  TargetType="{x:Type TabControl}">
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabControl}">
                    <Grid KeyboardNavigation.TabNavigation="Local">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <TabPanel Name="HeaderPanel"
                                  Grid.Row="0"
                                  Panel.ZIndex="1" 
                                  Margin="0,0,4,-1" 
                                  IsItemsHost="True"
                                  KeyboardNavigation.TabIndex="1"
                                  HorizontalAlignment="Center"/>
                      </Grid>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
于 2010-08-18T21:58:15.053 に答える