目标名称的WPF样式触发器无法正常工作

时间:2018-10-06 11:54:25

标签: c# wpf

我在使用触发器设置ControlTemplate中设置前景颜色时遇到问题。

            <LinearGradientBrush x:Key="TabItemDefaultBackgroundBrush" StartPoint="0,0" EndPoint="0,1">
                <GradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Offset="0.0" Color="#FFF" />
                        <GradientStop Offset="1.0" Color="#EEE" />
                    </GradientStopCollection>
                </GradientBrush.GradientStops>
            </LinearGradientBrush>

            <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />
            <SolidColorBrush x:Key="TabItemSelectBackgroundBrush" Color="#69C" />
            <SolidColorBrush x:Key="PressedBrush" Color="#79C" />
            <Style TargetType="{x:Type TabItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TabItem}">
                            <Grid>
                                <Border
                                    Name="tabBorder"
                                    MinWidth="150"
                                    MinHeight="50"
                                    Margin="0,0,20,0"
                                    Background="{StaticResource TabItemDefaultBackgroundBrush}"
                                    BorderBrush="{StaticResource SolidBorderBrush}"
                                    BorderThickness="1"
                                    CornerRadius="1,1,1,1">
                                    <Grid>
                                        <Grid >
                                            <TextBlock Name="HeaderHeader">
                                                </TextBlock>
                                        </Grid>
                                        <ContentPresenter
                                            x:Name="ContentSite"
                                            Margin="12,2,12,2"
                                            HorizontalAlignment="Center"
                                            VerticalAlignment="Center"
                                            ContentSource="Header"
                                            RecognizesAccessKey="True" />
                                    </Grid>
                                </Border>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="True">
                                    <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
                                    <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

选择选项卡后,背景边框'tabBorder'设置正确,但是文本块'HeaderHeader'的前景没有响应。

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

当我移除TargetName并将前景设置为白色(适用于所有组件)时,它确实可以工作。 (但显然内容pre中所有内容的前景色都是

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter Property="Foreground" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

即使是陌生人,当我将TargetName放回原位,但是将setter属性从前景更改为背景时,它确实起作用了!然后将所选标签的背景设置为白色。

<ControlTemplate.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter TargetName="HeaderHeader" Property="Background" Value="White" />
        <Setter TargetName="tabBorder" Property="Background" Value="{StaticResource TabItemSelectBackgroundBrush}" />
    </Trigger>
</ControlTemplate.Triggers>

到底为什么它不能满足我的需要(为所选标签设置前景)?!

1 个答案:

答案 0 :(得分:0)

啊哈,我今天学到了一些东西……我看错了方向!在“ ControlTemplate”上进行更多搜索之后,终于有一些东西陷入。ContentPresenter不显示选项卡的信息,它显示选项卡的标签,仅此而已。所以我的触发器工作得很好,但是它设置了一个毫无意义的文本块的前台!

当我将触发器更改为实际显示标签的控件时,这很容易...

<Setter TargetName="ContentSite" Property="TextElement.Foreground" Value="White" />

我确实必须使用附加的属性“ TextElement”,以便能够在文本元素上设置属性。