2012-07-13 100 views
1
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="QWERTY.animation" 
x:Name="Window" 
Title="animation" 
Width="640" Height="480"> 
<Window.Resources> 
    <Storyboard x:Key="Animation"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.FontSize)" Storyboard.TargetName="btn_1"> 
      <EasingDoubleKeyFrame KeyTime="0" Value="11"/> 
      <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="10.667"/> 
     </DoubleAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.FontWeight)" Storyboard.TargetName="btn_1"> 
      <DiscreteObjectKeyFrame KeyTime="0"> 
       <DiscreteObjectKeyFrame.Value> 
        <FontWeight>Normal</FontWeight> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 
      <DiscreteObjectKeyFrame KeyTime="0:0:0.3"> 
       <DiscreteObjectKeyFrame.Value> 
        <FontWeight>Bold</FontWeight> 
       </DiscreteObjectKeyFrame.Value> 
      </DiscreteObjectKeyFrame> 
     </ObjectAnimationUsingKeyFrames> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="btn_1"> 
      <EasingColorKeyFrame KeyTime="0" Value="#FFEAF0ED"/> 
      <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#FF106285"/> 
     </ColorAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 

<Grid x:Name="LayoutRoot"> 
    <Button x:Name="btn_2" Content="B" Height="55" Margin="236,98,0,0" VerticalAlignment="Top" Click="btn_2_Click" HorizontalAlignment="Left" Width="72" /> 
    <Button x:Name="btn_1" Content="A" Height="55" Margin="115,98,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="72" Click="btn_1_Click"> 
     <Button.Background> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="#FFEAF0ED" Offset="0.9"/> 
      </LinearGradientBrush> 
     </Button.Background> 
    </Button> 
    <Button Content="Remove" HorizontalAlignment="Left" Margin="173,179,0,217" Width="75" Click="Button_Click" /> 
</Grid> 

问题删除故事板在WPF

enter image description here

public partial class animation : Window 
     { 
    Storyboard SB; 
    public animation() 
    { 
     this.InitializeComponent();   
    } 

    public void Animate(string name) 
    { 
     SB = (Storyboard)(FindResource("Animation")); 
     Storyboard.SetTargetName(SB.Children[0], name); 
     Storyboard.SetTargetName(SB.Children[1], name); 
     Storyboard.SetTargetName(SB.Children[2], name); 
     SB.Begin();    
    } 
    private void btn_1_Click(object sender, RoutedEventArgs e) 
    { 
     Button Btn_1 = (Button)sender; 
     Animate(btn_1.Name); 
    } 

    private void btn_2_Click(object sender, RoutedEventArgs e) 
    { 
     Button Btn_2 = (Button)sender; 
     Animate(Btn_2.Name); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     SB.Remove(); 
    } 
} 

它的输出会像下面

Output

上述结果是在我点击两个按钮之后。然后我点击删除按钮,只删除动画中的按钮B。但我想删除按钮A和按钮B动画通过点击删除按钮。

回答

1

分配给故事板的时间只能有一个TargetName。通过使用SetTargetName,您可以将目标转移到新的按钮。然后,当你点击删除,你删除你添加的最后一个。看看这个Silverlight的Blog,但应该在这里适用。您唯一的选择是使用Style.Triggers并将您的动画放在样式中。

从以上链接:

在这个例子中,它可能是不希望为在一个矩形停止的动画,使得动画可以在另一个矩形启动。也许你想让两个动画同时运行。但是,您不能使用同一个动画对象同时运行两个独立的动画,因为只有一个TargetName。这并不意味着您要重新为每个对象创建一个单独的Storyboard。相反,您需要为要同时运行(同步)的每个动画创建一个Storyboard。