coloranimation的绑定颜色值
问题描述:
我有一个边框,我试图使它的BorderBrush闪烁“淡入淡出”。但我的问题是,Flasing颜色取决于后面的代码。所以颜色会改变,但我必须永远保持淡入淡出状态,同时改变这个边框的“From”颜色。coloranimation的绑定颜色值
我试图在两个方面: 1:直接结合的颜色,但后来我知道,有一个冻结的事情是需要的颜色应用:
<Border Grid.Column="1" Grid.Row="2" Name="ActiveBorder" VerticalAlignment="Stretch" Height="auto" BorderBrush="SteelBlue" BorderThickness="2">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Visible">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="BorderBrush.Color" Duration="00:00:01" From="{Binding RelativeSource={RelativeSource Self}, Path=FlashBrush}" To="SteelBlue" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
2:启动和停止从代码的动画,同时改变颜色:
<Border Grid.Column="1" Grid.Row="2" Name="ActiveBorder" VerticalAlignment="Stretch" Height="auto" BorderBrush="SteelBlue" BorderThickness="2" >
<Border.Resources>
<Storyboard x:Key="tt" x:Name="tt">
<ColorAnimation AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="BorderBrush.Color" Duration="00:00:01"
From="{Binding RelativeSource={RelativeSource Self}, Path=FlashBrush}" To="SteelBlue" />
</Storyboard>
</Border.Resources>
</Border>
的代码:
Storyboard storyBoard = ActiveBorder.Resources["tt"] as Storyboard;
storyBoard.Stop();
switch (value)
{
case ElementStatus.Active:
FlashBrush = Brushes.LawnGreen;
break;
case ElementStatus.Hold:
FlashBrush = Brushes.Blue;
break;
default:
FlashBrush = Brushes.SteelBlue;
break;
}
storyBoard.Begin(ActiveBorder);
有什么想法?谢谢。
答
我找到了解决方案:我们必须在代码中完成。没有约束力。
ColorAnimation myColorAnimation;
public void ChangeAnimationColor(SolidColorBrushFlashBrush)
{
myColorAnimation = new ColorAnimation();
myColorAnimation.From = FlashBrush.Color; // the wanted new color
myColorAnimation.To = Colors.Transparent;
myColorAnimation.AutoReverse = true;
myColorAnimation.RepeatBehavior = RepeatBehavior.Forever;
myColorAnimation.Duration = new Duration(TimeSpan.FromSeconds(1));
Storyboard.SetTargetName(myColorAnimation, "MySolidColorBrush");
Storyboard.SetTargetProperty(myColorAnimation,
new PropertyPath(SolidColorBrush.ColorProperty));
Storyboard myStoryboard = new Storyboard();
myStoryboard.Children.Add(myColorAnimation);
myStoryboard.Begin(this);
}
和XML:
<Border Name="ActiveBorder" BorderThickness="2" >
<Border.BorderBrush>
<SolidColorBrush x:Name="MySolidColorBrush" Color="Transparent" />
</Border.BorderBrush>
... Add what ever you want to the Border.
</Border>
你能请注明你所描述的方法的类方面?我的意思是“这个”的价值。也不使用函数的参数“SolidColorBrushFlashBrush”。 – agarwaen