2

以此为基础使动画开始使用后面的代码。根据文章的内容,我有以下几点:

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

我有以下 XAML(显然):

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

以及背后的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();            
    }

    public void AnimateLabelRotation()
    {
        Storyboard sbdLabelRotation = (Storyboard)FindResource("sbdLabelRotation");

        sbdLabelRotation.Begin(this);
    }

我从按钮单击事件中调用它。工作并找到故事FindResource板,但没有任何反应。我已经设法让动画在事件触发器上工作,但显然我错过了背后的代码。

4

2 回答 2

2

这个:

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

和这个:

Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"

不兼容。

当动画试图找到要设置动画的属性时,它会转到(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>

注意RenderTransformOrigin设置 - 这意味着旋转轴将位于对象的中心(X 和 Y)。

此外,在动画中它应该是:

Storyboard.TargetProperty="(Label.RenderTransform).(RotateTransform.Angle)"
于 2013-10-22T17:32:41.810 回答
0

有一个链接可以下载整个项目 http://www.galasoft.ch/mydotnet/articles/resources/article-2006102701/GalaSoftLb.Article2006102701.zip

您可以研究代码并查看它的运行情况。有时它更有帮助。同样在您的代码中:

sbdLabelRotation.Begin(this);

可能是错的。如您所知,this关键字引用了类本身,在您的情况下是MainWindow类。您应该尝试不使用 this 关键字。

于 2013-10-22T18:22:11.267 回答