2012-06-04 42 views
0
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="storyboard.MainWindow" 
x:Name="Window" 
Title="MainWindow" 
Width="640" Height="480"> 
<Window.Resources> 
    <Storyboard x:Key="all_in_one"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[3].(GradientStop.Color)" Storyboard.TargetName="btn_a"> 
      <EasingColorKeyFrame KeyTime="0" Value="#FFCDCDCD"/> 
      <EasingColorKeyFrame KeyTime="0:0:0.6" Value="#FFED0B00"/> 
      <EasingColorKeyFrame KeyTime="0:0:1" Value="#FFCDCDCD"/> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 


<Grid x:Name="LayoutRoot"> 
    <Button x:Name="btn_a" Content="A" HorizontalAlignment="Left" Height="56" Margin="117,134,0,0" VerticalAlignment="Top" Width="66" Click="btn_a_Click" /> 
    <Button x:Name="btn_b" Content="B" HorizontalAlignment="Left" Height="56" Margin="187,134,0,0" VerticalAlignment="Top" Width="66"/> 
    <Button x:Name="btn_c" Content="C" Height="56" Margin="257,134,301,0" VerticalAlignment="Top"/> 
</Grid> 

申请同一故事板

enter image description here

这里我创建用于按钮( “btn_a”)情节串连图板。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     this.InitializeComponent(); 

     // Insert code required on object creation below this point. 
    } 

    private void btn_a_Click(object sender, RoutedEventArgs e) 
    { 
     Storyboard button_animation = (Storyboard)(FindResource("all_in_one")); 
     button_animation.Begin();    
    } 
} 

我想相同的故事板应用到每个其他按钮,诸如btn_b和在代码btn_c后面动态。

如果我点击按钮b,它必须动画和按钮c以及。

回答

0

这可能不是最好的办法。话虽这么说,你可以做这样的:

private void btnC_Click(object sender, RoutedEventArgs e) 
    { 
     Storyboard storyboard = Resources["all_in_one"] as Storyboard; 
     Storyboard.SetTargetName(storyboard, "btnC"); 

     storyboard.Begin(); 
    } 

您需要从XAML中删除这个工作你Storyboard.TargetName分配。

如果您需要一次启动多个故事板,只需使用新的目标名称调用Storyboard.SetTargetName函数后再调用Begin()。

+0

有没有办法在XAML中完全做到这一点?我猜测使用DataTrigger? –