TabControl/TabPanel/TabItem的WPF样式
这里有一个关于WPF TabControl、TabItem和TabPanel的新手问题。在StackOVF上有一个相关的问题,我在我的应用程序中愉快地使用了一个答案。下面是答案的链接以及代码片段:TabControl/TabPanel/TabItem的WPF样式,wpf,xaml,tabcontrol,tabpanel,Wpf,Xaml,Tabcontrol,Tabpanel,这里有一个关于WPF TabControl、TabItem和TabPanel的新手问题。在StackOVF上有一个相关的问题,我在我的应用程序中愉快地使用了一个答案。下面是答案的链接以及代码片段: 虽然这很好,但我很乐意将资源和样式移到更好的位置(样式表之类的)。我的第一次尝试是将标记移动到,但这不起作用。我尝试了几种不同的方法,但都没有成功。下面是一个我有点期待成功的尝试示例: <!-- Doesn't work as expected: --> <Window.Res
虽然这很好,但我很乐意将资源和样式移到更好的位置(样式表之类的)。我的第一次尝试是将
标记移动到
,但这不起作用。我尝试了几种不同的方法,但都没有成功。下面是一个我有点期待成功的尝试示例:
<!-- Doesn't work as expected: -->
<Window.Resources>
<Style TargetType="{x:Type TabPanel}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Window.Resources>
搜索web和msdn并没有帮助我解决问题,而是给我留下了第二个(相关)问题:实际上什么是选项卡面板,它与选项卡控件有什么关系
任何帮助和提示都将不胜感激
(已编辑:在上一个示例中评论说该代码不适用于我。)您可能需要创建一个ControlTemplate来执行此操作 我还不太熟悉ControlTemplates。我从以下方面破解了这个示例:
TabControl使用一个专门的TabPanel类,而不是像StackPanel这样的通用面板,因为如果你乱用TabControl,你会发现这个面板做了很多通用面板做不到的事情。一种是调整多行中的选项卡标题项。另一种方法是,项目行将被重新排列,以便选定的tabitem标题始终位于最后一行。我想它可能会做得更多
我很想知道为什么将样式放在窗口资源部分不起作用。我最初的反应是,在我尝试之前,它应该是有效的。我将此添加为答案,因为SO不允许我在评论中添加图像。谢谢Chris的建议。我看到过这样的示例,但这似乎需要很多代码来更改tabheaders的一个布局属性,因为它会让您创建整个ControlTemplate。也许一位大师可以提出另一种意见,告诉我们这是否是一条路?我知道你的意思:)我一直在尝试改变扩展器的外观,这不是一个简单的过程。所以我也希望有人有更好的方法:)“我最初的反应是,在我尝试之前,它应该是有效的。”啊!所以我还是清醒的:)谢谢你在标签面板NVM上的解释。有道理。我在调查中发现的一个“线索”(如果我理解正确的话)是TabPanel没有XAML(看起来)。例如,不能将
元素添加到TabControl。(编辑评论)有点晚了,但翻看我以前的问题,我发现你回答了我的一个问题。信用到期时的信用:)
<!-- Doesn't work as expected: -->
<Window.Resources>
<Style TargetType="{x:Type TabPanel}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</Window.Resources>
<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>