2011-08-30 65 views
2

我有一個邊框,我試圖使它的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); 

有什麼想法?謝謝。

回答

2

我找到了解決方案:我們必須在代碼中完成。沒有約束力。

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