C# 在WPF中启动XAML动画

C# 在WPF中启动XAML动画,c#,.net,wpf,xaml,animation,C#,.net,Wpf,Xaml,Animation,我将使用代码隐藏作为制作动画的基础。根据文章内容,我有以下几点: <Window.Resources> <Storyboard x:Key="sbdLabelRotation"> <DoubleAnimation Storyboard.TargetName="lblHello" Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateT

我将使用代码隐藏作为制作动画的基础。根据文章内容,我有以下几点:

<Window.Resources>
    <Storyboard x:Key="sbdLabelRotation">
        <DoubleAnimation
          Storyboard.TargetName="lblHello"
          Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"
          From="0"
          To="360"
          Duration="0:0:0.5"
          RepeatBehavior="4x" />
    </Storyboard>

</Window.Resources>
我通过按钮点击事件调用它。
FindResource
工作并找到故事板,但什么也没发生。我已经设法让动画在事件触发器上工作,但很明显,我缺少了一些隐藏的代码。

这是:

<Label x:Name="lblHello" Content="test" Margin="20"/>
不兼容

当动画试图找到要设置动画的属性时,它会转到
(TextBlock.RenderTransform)
,并找到null,因为您没有声明它(实际上它没有,因为您说TextBlock,但将其应用于Label,后面的答案中会详细介绍)。因此,它无法找到
(RotateTransform.Angle)

要纠正这个问题:

<Label x:Name="lblHello"
        Content="test"
        Margin="20"
        RenderTransformOrigin="0.5,0.5">
    <Label.RenderTransform>
        <RotateTransform />
    </Label.RenderTransform>
</Label>

有一个链接可以下载整个项目

您可以研究代码并看到它正在运行。有时它更有用。 在您的代码中,还有以下部分:

sbdLabelRotation.Begin(这个)


可能是错的。正如您所知,
this
关键字引用类本身,在您的例子中是
main窗口
类。您应该尝试不使用this关键字。

只编写
故事板。TargetProperty=“RenderTransform.Angle”
也会更简单。尽管如此,WPF仍将解决这一问题。
<Label x:Name="lblHello" Content="test" Margin="20"/>
Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"
<Label x:Name="lblHello"
        Content="test"
        Margin="20"
        RenderTransformOrigin="0.5,0.5">
    <Label.RenderTransform>
        <RotateTransform />
    </Label.RenderTransform>
</Label>
Storyboard.TargetProperty="(Label.RenderTransform).(RotateTransform.Angle)"