ScaleTransform中的DoubleAnimation

时间:2010-05-28 19:05:17

标签: c# .net wpf wpf-controls

作为展览,我正在尝试在ScaleTransform的ScaleX和ScaleY属性上使用DoubleAnimation。我有一个矩形(144x144),我想在五秒钟内制作矩形。

我的XAML:

<Window x:Class="ScaleTransformTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <Grid>
        <Rectangle Name="rect1" Width="144" Height="144" Fill="Aqua">
            <Rectangle.RenderTransform>
                <ScaleTransform ScaleX="1" ScaleY="1" />
            </Rectangle.RenderTransform>
        </Rectangle>
    </Grid>
</Window>

我的C#:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    ScaleTransform scaly = new ScaleTransform(1, 1);
    rect1.RenderTransform = scaly;

    Duration mytime = new Duration(TimeSpan.FromSeconds(5));
    Storyboard sb = new Storyboard();

    DoubleAnimation danim1 = new DoubleAnimation(1, 1.5, mytime);
    DoubleAnimation danim2 = new DoubleAnimation(1, 0.5, mytime);
    sb.Children.Add(danim1);
    sb.Children.Add(danim2);

    Storyboard.SetTarget(danim1, scaly);
    Storyboard.SetTargetProperty(danim1, new PropertyPath(ScaleTransform.ScaleXProperty));
    Storyboard.SetTarget(danim2, scaly);
    Storyboard.SetTargetProperty(danim2, new PropertyPath(ScaleTransform.ScaleYProperty));

    sb.Begin();
}

不幸的是,当我运行这个程序时,它什么也没做。矩形保持在144x144。如果我取消动画,只需

ScaleTransform scaly = new ScaleTransform(1.5, 0.5);
rect1.RenderTransform = scaly;

它会立即拉长它,没问题。其他地方有问题。有什么建议?我已经阅读了http://www.eggheadcafe.com/software/aspnet/29220878/how-to-animate-tofrom-an.aspx的讨论,其中有人似乎已经使用了纯XAML版本,但代码没有在那里显示。

编辑:在Applying animated ScaleTransform in code problem似乎有人有一个非常类似的问题,我可以使用他的方法,但是string thePath = "(0).(1)[0].(2)";到底是什么?这些数字代表什么?

1 个答案:

答案 0 :(得分:7)

这是交易,这是来自MSDN的Storyboards Overview条目的引用,在标题为“你在哪里可以使用故事板?”中:

  

故事板可用于制作动画   动画的依赖属性   课程(有关的更多信息   什么使一个类可动画,请参阅   动画概述)。但是,因为   故事板是一个框架级别   功能,对象必须属于   FrameworkElement的NameScope或   FrameworkContentElement上。

这让我觉得ScaleTransform对象不属于任何NameScope的{​​{1}}。即使FrameworkElementRectangle,因为FrameworkElement不是其逻辑子项的一部分,而是分配给其他属性的值(在这种情况下为ScaleTransform属性)。

要解决此问题,您需要以不同方式指定目标对象和RenderTransform,因此:

PropertyPath

尝试了它并且它有效,即使我不完全理解MSDN自己的引用: - )