【问题标题】:WPF ControlTemplate Style GradientStop in Trigger触发器中的 WPF ControlTemplate 样式 GradientStop
【发布时间】:2010-10-31 13:28:15
【问题描述】:

这是我的 TabItem 的 XAML。我希望能够在触发器中设置单个渐变停止的颜色。我知道我可以在触发器的设置器中完全重新定义渐变,但我想访问背景上的特定属性,以便将来为它设置动画。

我已经尝试了触发器设置器中所有内容的所有变体,并在谷歌上搜索了很长时间 - 但我仍然无法编译它。我也尝试过 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>

【问题讨论】:

    标签: wpf xaml animation styles


    【解决方案1】:

    您可以对其进行动画处理,例如 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>
    

    【讨论】:

    • 你的权利,那是 hacky。但是,如果您可以通过分配停靠点名称来为其设置动画,为什么不能在 controltemplate 中执行此操作?
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多