coloranimation的绑定颜色值

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> 
+1

你能请注明你所描述的方法的类方面?我的意思是“这个”的价值。也不使用函数的参数“SolidColorBrushFlashBrush”。 – agarwaen