我设置了一个TabControl
,其中包含用于保存图片的自定义网格和一个Textblock
对象作为标题的设计(TabItem
)。我目前正在使用模板控制标题的背景颜色,我无法弄清楚如何使用相同的模板控制嵌入式Foreground
的{{1}}颜色。
我是Visual Studio C#的新手,但我对这些模板的理解是我可以使用它们设置子属性(类似于CSS子选择器)?还是我完全离开?
这是我的设计" - 您会注意到顶部的三个标签带有自定义样式:
我TextBlock
的当前模板
TabItem
我目前为<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid x:Name="Root">
<Border x:Name="Border" Margin="0,0,-4,0">
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="12,2,12,2"
RecognizesAccessKey="True" />
</Border>
</Grid>
<ControlTemplate.Triggers>
<!-- Selected color -->
<Trigger Property="IsSelected" Value="True">
<!-- <Setter Property="TextElement.Foreground" TargetName="ContentSite" Value="White"/>-->
<Setter Property="Panel.ZIndex" Value="100" />
<Setter TargetName="Border" Property="Background" Value="#FFEF690D" />
</Trigger>
<!-- Not Selected color -->
<Trigger Property="IsSelected" Value="False">
<Setter TargetName="Border" Property="Background" Value="#FFEE8740" />
</Trigger>
<!-- Tab mouseovers-->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="Border" Property="Background" Value="#FFEFA470" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
设置的xaml(为了简洁,减少了第三个TabControl
TabItem
答案 0 :(得分:0)
我建议使用LinqToVisualTree ...
http://blog.scottlogic.com/2010/03/04/linq-to-visual-tree.html
您可以在TabControl中找到所有“textBlock”控件,如下所示:
tabControl.Descendants<TextBlock>().Where(d => d.Name=="textBlock");
然后您将控制TextBlock属性
答案 1 :(得分:0)
对于任何想要完成相同类型任务的人来说,有一种方法可以引用父资源和&#34;查询&#34;他们的信息。
我没有在TabItem
上设置触发器来更改字体的颜色,而是将触发器放在引用TextBlock
状态的TabItem
上。
您最终使用DataTrigger
并使用RelativeSource
设置对其进行绑定。在我的情况下,我使用TabItem
{RelativeSource AncestorType={x:Type TabItem}}}
这是我应用于TextBlock
控件的XAML样式:
<Style x:Key="HeaderTextStyle" TargetType="{x:Type TextBlock}">
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="TextTrimming" Value="None"/>
<Setter Property="Foreground" Value="{StaticResource HeaderTextColor_NotSelected}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" Value="true">
<Setter Property="Foreground" Value="{StaticResource HeaderTextColor}"/>
</DataTrigger>
</Style.Triggers>
</Style>