8

这是关于 WPF TabControl、TabItem 和 TabPanel 的新手问题。StackOVF 上有一个相关的问题,我很乐意在我的应用程序中使用一个答案。这是答案的链接,以及代码片段:

WPF:在 TabControl 中居中 TabItems

<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 并没有帮助我解决我的问题,而是给我留下了第二个(相关的)问题:TabPanel 到底什么,它与 TabControl 有什么关系?

任何帮助和提示将不胜感激。

(已编辑:在上一个示例中评论说该代码对我不起作用。)

4

2 回答 2

13

替代文字

TabControl 使用专门的 TabPanel 类,而不是像 StackPanel 这样的通用面板,因为如果您乱用 TabControl,您会意识到面板做了很多通用面板不做的事情。一种是在多行中调整选项卡标题项。另一个是项目的行将被重新排列,以便选定的 tabitem 标题始终位于最后一行。我想它可能会做得更多

我很想知道为什么将样式放在窗口资源部分不起作用。我最初的反应是在我尝试之前它应该可以工作。我将其添加为答案,因为 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 回答