【问题标题】:issue in Deleting Storyboard in wpf在 wpf 中删除情节提要中的问题
【发布时间】:2012-07-14 00:49:15
【问题描述】:
<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>

The design will be like below

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();
    }
}

它的输出将如下所示

上面的结果是我一个一个点击了两个按钮之后,然后我点击了删除按钮,只有按钮B动画被删除了。但我想通过单击删除按钮来删除 按钮 A 和按钮 B 动画

【问题讨论】:

    标签: c# wpf storyboard


    【解决方案1】:

    您一次只能将一个 TargetName 分配给 Storyboard。通过使用 SetTargetName,您将目标转移到新按钮。然后,当您单击删除时,您将删除您添加的最后一个。看看这个 Blog 它的 SilverLight 但应该在这里申请。您唯一的其他选择是使用 Style.Triggers 并将您的动画放入样式中。

    来自上面的链接:

    在此示例中,可能不希望在一个矩形上停止动画,以便动画可以在另一个矩形上开始。也许您希望两个动画同时运行。但是,您不能使用同一个动画对象同时运行两个单独的动画,因为只有一个 TargetName。这并不意味着您又要为每个对象创建单独的 Storyboard。相反,您需要为每个想要同时(同步)运行的动画创建一个 Storyboard。

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2015-04-20
      • 2011-01-16
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2016-07-10
      • 2011-12-07
      • 1970-01-01
      相关资源
      最近更新 更多