Wpf 如何通过TabControl模板控制Textblock属性

Wpf 如何通过TabControl模板控制Textblock属性,wpf,xaml,wpf-controls,tabcontrol,Wpf,Xaml,Wpf Controls,Tabcontrol,我设置了一个带有自定义网格的TabControl,用于保存图片和Textblock对象,作为标题的设计(TabItem)。我目前正在使用模板控制标题的背景色,我不知道如何使用同一模板控制嵌入的TextBlock的前景颜色 我是Visual Studio C#新手,但我对这些模板的理解是,我也可以使用它们设置子属性(类似于CSS子选择器)?还是说我完全疯了 这是我的“设计”-您会注意到顶部的三个选项卡带有自定义样式: TabItem 我建议使用LinqToVisualTree 您可以在Tab

我设置了一个带有自定义网格的
TabControl
,用于保存图片和
Textblock
对象,作为标题的设计(
TabItem
)。我目前正在使用模板控制标题的背景色,我不知道如何使用同一模板控制嵌入的
TextBlock
前景
颜色

我是Visual Studio C#新手,但我对这些模板的理解是,我也可以使用它们设置子属性(类似于CSS子选择器)?还是说我完全疯了

这是我的“设计”-您会注意到顶部的三个选项卡带有自定义样式:

TabItem


我建议使用LinqToVisualTree

您可以在TabControl中找到所有“textBlock”控件,如下所示:

tabControl.Descendants<TextBlock>().Where(d => d.Name=="textBlock");
tabControl.subjects()。其中(d=>d.Name==“textBlock”);

然后您可以控制TextBlock属性

我建议使用LinqToVisualTree

您可以在TabControl中找到所有“textBlock”控件,如下所示:

tabControl.Descendants<TextBlock>().Where(d => d.Name=="textBlock");
tabControl.subjects()。其中(d=>d.Name==“textBlock”);

然后您可以控制TextBlock属性

对于任何试图完成相同任务的人,有一种方法可以引用父资源并“查询”它们以获取信息

我没有在
TabItem
上放置触发器来更改字体的颜色,而是在引用
TabItem
状态的
TextBlock
上放置触发器

您将使用
DataTrigger
并使用
RelativeSource
设置绑定它。在我的例子中,我用
{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>

对于任何试图完成相同任务的人来说,都有一种方法可以引用父资源并“查询”它们以获取信息

我没有在
TabItem
上放置触发器来更改字体的颜色,而是在引用
TabItem
状态的
TextBlock
上放置触发器

您将使用
DataTrigger
并使用
RelativeSource
设置绑定它。在我的例子中,我用
{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>


出于某种原因,您建议的网站正在重定向试图直接访问文章的用户——word to the wise,在主页上搜索“LINQ to VISUAL TREE”以查看文章,直到文章修复。好的,谢谢您的提示。希望建议的解决方案能有所帮助出于某种原因,您建议的网站正在重定向试图直接访问帖子的用户——word to the wise,在主页上搜索“LINQ to VISUAL TREE”以查看文章,直到文章修复。啊,好的,谢谢您的提示。希望提议的解决方案能有所帮助