在TabItem = IsSelected上更改图像和文本块前景

时间:2013-11-01 23:10:51

标签: wpf xaml tabitem

我有一些TabItems,每个都包含一个图像和一个文本块。这是代码:

<TabItem.Header>
<ContentControl>
    <ContentControl.Template>
        <ControlTemplate>
            <StackPanel x:Name="sp" Orientation="Horizontal">
                <Image x:Name="img" Source="img0.png"/>
                <TextBlock x:Name="tb" Text="Tab1" VerticalAlignment="Center" Foreground="Green"/>
            </StackPanel>
            <ControlTemplate.Triggers>
                <Trigger Property="TabItem.IsSelected" Value="True">
                    <Setter TargetName="img" Property="Source" Value="img1.png" />
                    <Setter TargetName="tb" Property="Foreground" Value="Red" />
                    <Setter Property="FontWeight" Value="Bold"/>
                </Trigger>
                <Trigger SourceName="sp" Property="IsMouseOver" Value="True">
                    <Setter TargetName="img" Property="Source" Value="img1.png" />
                    <Setter TargetName="tb" Property="Foreground" Value="Red" />
                    <Setter Property="FontWeight" Value="Bold"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>

我想要实现的是在选择TabItem时更改图像的源和文本块的前景值。 IsMouseOver行为正常,但TabItem.IsSelected未按预期工作。 基本上这段代码没有做我认为它应该做的事情:

<Trigger Property="TabItem.IsSelected" Value="True">
<Setter TargetName="img" Property="Source" Value="img1.png" />
<Setter TargetName="tb" Property="Foreground" Value="Red" />
<Setter Property="FontWeight" Value="Bold"/>

请分享您的意见。

谢谢。

1 个答案:

答案 0 :(得分:0)

您正试图从IsSelected到达TabItem的{​​{1}}属性,而普通TabItem.Header无法实现这一点。相反,您需要使用Trigger,以便DataTrigger Bind IsSelected属性RelativeSource Binding

<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=
    {x:Type TabItem}}}" Value="True">
    <Setter TargetName="img" Property="Source" 
        Value="/WpfApplication1;component/Images/Tulips.jpg" />
    <Setter TargetName="tb" Property="Foreground" Value="Red" />
    <Setter Property="TextElement.FontWeight" Value="Bold"/>
</DataTrigger>