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>

在此处输入图像描述

在这里,我为按钮 a("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 设置动画。

4

1 回答 1

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() 即可。

于 2012-06-04T19:14:29.770 回答