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)"