如何避免使用模板将ControlTemplate中的Coloranimation应用于每个对象

时间:2019-02-08 08:08:28

标签: wpf xaml storyboard coloranimation

我在样式的ControlTemplate中声明了ColorAnimations。

应该做什么:

每当鼠标悬停在对象上时,该特定对象的颜色应设置为动画。

相反,它做什么:

对每个对象的颜色进行动画处理,即使将激活动画的属性并未在所有对象上更改,只要将鼠标悬停在其中一个对象上,样式就会应用到该样式。

我之前尝试过的事情:

我尝试使用Eventrigger代替普通触发器,但问题仍然存在。 我也尝试使用“ Name”属性而不是“ x:Name”,但这也无济于事。 同样,不使用Storyboard.TargetName,而是使用Storyboard.Target,并使用与RelativeSource的绑定来让它找到对象..而且,每当我将鼠标悬停在任何使用此样式的对象上时,它们都会动画化

如果我使用“设置工具”而不是“故事板”和“ ColorAnimations”来更改背景,它将按预期工作。

样式

Span<byte>

Thumb样式用于ScrollViewer中使用的Scrollbar样式中。 然后在两个位置使用Scrollviewer样式:

1:

string

2:

<Style x:Key="Fraction_ScrollViewer_ScrollBar_Thumb" TargetType="{x:Type Thumb}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Thumb}">
                <Border
                    x:Name="Border"
                    CornerRadius="5"
                    Background="{TemplateBinding Background}"
                    BorderThickness="0" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard
                                Name="IsMouseOver_True"
                                HandoffBehavior="Compose">
                                <Storyboard>
                                    <ColorAnimation
                                        Storyboard.TargetName="Border"
                                        Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
                                        To="{StaticResource 'Color_CoolGrey'}"
                                        Duration="0:0:0.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>

                        <Trigger.ExitActions>
                            <BeginStoryboard
                                Name="IsMouseOver_False">
                                <Storyboard>
                                    <ColorAnimation
                                        Storyboard.TargetName="Border"
                                        Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"
                                        To="{StaticResource 'Color_MidGrey'}"
                                        Duration="0:0:0.2" />
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.ExitActions>
                    </Trigger>

是什么原因导致这种现象?如何在仍然使用动画的情况下避免这种情况?

1 个答案:

答案 0 :(得分:0)

显然,所有Button在其Background属性中共享相同的Brush实例。

您可以为模板中的每个边框明确分配单独的画笔:

<Border x:Name="Border" ...>
    <Border.Background>
        <SolidColorBrush Color="{Binding Background.Color,
                                 RelativeSource={RelativeSource TemplatedParent}}"/>
    </Border.Background>
</Border>