我有一个 TabControl,其样式可以更改 TabItem 标题的 FontSize。当我数据绑定 ItemsSource 时,只有标题受 FontSize 影响。但是,当我在另一个 TabControl 上使用相同的样式并在 XAML 中添加 TabItem 时,TabItem 中的所有内容的 FontSize 都会更改。我希望该样式能够与数据绑定和非数据绑定选项卡项一起使用。
<TabControl Style="{StaticResource VariablesTabControl}" ItemsSource="{Binding TabItems}">
...
</TabControl>
MainSkin.xaml:
<Style TargetType="TabControl" x:Key="VariablesTabControl">
<Setter Property="ItemContainerStyle" Value="{StaticResource VariableTabItem}" />
...
</Style>
<Style TargetType="TabItem" x:Key="VariableTabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid Name="Panel" MinHeight="30" MinWidth="120">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Left" ContentSource="Header" Margin="10,2" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Panel" Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="FontSize" Value="12" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Panel" Property="Background" Value="{StaticResource BackgroundMouseOver}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Panel" Property="Background" Value="{StaticResource SelectedBrush}" />
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}" />
<Setter Property="FontSize" Value="12" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
你的问题是由于属性值继承 http://msdn.microsoft.com/en-us/library/ms753197(v=vs.110).aspx.
当您定义TabItem
在 xaml 中是这样的:
<TabItem>
<TabItem.Header>
<TextBlock Text="TEST_HEADER1" />
</TabItem.Header>
<TextBlock Text="TEST_CONTENT1" />
</TabItem>
Both TextBox
es、标题和内容位于逻辑树中TabItem
这意味着任何可继承的属性设置TabItem
将沿着树传播到这些TextBox
es.
The Foreground
and FontSize
是可遗传的。
如果你有类似的东西:
<TabItem Header="TEST_HEADER2">TEST_CONTENT2</TabItem>
你没有任何元素TabItem
的逻辑树中,Header 和 content 元素会自动生成,属性不会被继承。
但这种类型的声明TabItem
不是很有用,您通常需要一些高级 XAML 作为项目内容,因此我认为解决此问题的最佳方法是更改中的所有这些文本属性TabItem
's HeaderTemplate
,你可以绑定到TabItem's
属性使用RelativeSource
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)