代码之家  ›  专栏  ›  技术社区  ›  nlaq

触发器中的WPF ControlTemplate样式GradientStop

  •  1
  • nlaq  · 技术社区  · 16 年前

    这是我的tabitem的xaml。我想能够设置一个触发器中单个渐变停止的颜色。我知道我可以在触发器的setter中完全重新定义渐变,但是我想访问背景上的一个特定属性,以便将来可以对其进行动画处理。

    我已经尝试了触发器设置器中所有的变体,并在谷歌上搜索了很长一段时间,但我仍然无法编译它。我也尝试过class.property语法,但仍然没有。此代码引发的当前错误是:

    “未找到类型”background.gradientstops[0]“。”

    我很确定我知道这里发生了什么-也许我想要的是不可能的。但必须有一种方法来动画控制模板中的控件渐变…

    有人能帮我吗? 谢谢

    <Style TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <TextBlock Padding="6 2 6 2" Name="TheHeader">
                        <TextBlock.Background>
                            <LinearGradientBrush StartPoint="0, 0" EndPoint="0, 1">
                                <GradientStop Offset="0" Color="#f4fafd" />
                                <GradientStop Offset="1" Color="#ceedfa" />
                            </LinearGradientBrush>
                        </TextBlock.Background>
                        <ContentPresenter ContentSource="Header" Margin="0" />
                    </TextBlock>
                    <ControlTemplate.Triggers >
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="TheHeader" Property="Background.GradientStops[0].Color" Value="White" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   rmoore    16 年前

    您可以将其设置为动画,如示例中所示。 here .

    您也可以使用一个轻微的黑客设置它,尽管我总是喜欢创建多个画笔作为资源,并交换它们,或者像您提到的那样在中重新创建一个画笔。

    <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <TextBlock Padding="6 2 6 2"
                                   Name="TheHeader" Tag="#f4fafd">
                                        <TextBlock.Background>
                                                <LinearGradientBrush StartPoint="0, 0"
                                                                     EndPoint="0, 1">
                                                        <GradientStop Offset="0" 
                                                                      Color="{Binding ElementName=TheHeader, Path=Tag}"/>
                                                        <GradientStop Offset="1"
                                                                      Color="#ceedfa" />
                                                </LinearGradientBrush>
                                        </TextBlock.Background>
                                        <ContentPresenter ContentSource="Header"
                                                          Margin="0" />
                        </TextBlock>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected"
                                     Value="True">
                                <Setter TargetName="TheHeader"
                                        Property="Tag"
                                        Value="Red" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>