我在样式的ControlTemplate中声明了ColorAnimations。
每当鼠标悬停在对象上时,该特定对象的颜色应设置为动画。
对每个对象的颜色进行动画处理,即使将激活动画的属性并未在所有对象上更改,只要将鼠标悬停在其中一个对象上,样式就会应用到该样式。
我尝试使用Eventrigger代替普通触发器,但问题仍然存在。 我也尝试使用“ Name”属性而不是“ x:Name”,但这也无济于事。 同样,不使用Storyboard.TargetName,而是使用Storyboard.Target,并使用与RelativeSource的绑定来让它找到对象..而且,每当我将鼠标悬停在任何使用此样式的对象上时,它们都会动画化
如果我使用“设置工具”而不是“故事板”和“ ColorAnimations”来更改背景,它将按预期工作。
Span<byte>
Thumb样式用于ScrollViewer中使用的Scrollbar样式中。 然后在两个位置使用Scrollviewer样式:
string
<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>
是什么原因导致这种现象?如何在仍然使用动画的情况下避免这种情况?
答案 0 :(得分:0)
显然,所有Button在其Background属性中共享相同的Brush实例。
您可以为模板中的每个边框明确分配单独的画笔:
<Border x:Name="Border" ...>
<Border.Background>
<SolidColorBrush Color="{Binding Background.Color,
RelativeSource={RelativeSource TemplatedParent}}"/>
</Border.Background>
</Border>