【问题标题】:DoubleAnimation in ScaleTransformScaleTransform 中的 DoubleAnimation
【发布时间】:2010-05-28 19:05:17
【问题描述】:

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

我的 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)"; 到底是什么?这些数字代表什么?

【问题讨论】:

    标签: c# .net wpf wpf-controls


    【解决方案1】:

    这就是交易,这是来自 MSDN 的 Storyboards Overview 条目的引用,在标题为“你可以在哪里使用情节提要?”的部分:

    故事板可用于制作动画 动画的依赖属性 类(有关更多信息 是什么使类具有动画效果,请参阅 动画概述)。然而,由于 故事板是框架级别的 特征,对象必须属于 FrameworkElement 的 NameScope 或 框架内容元素。

    这让我想到ScaleTransform 对象不属于任何FrameworkElementNameScope。即使RectangleFrameworkElement,因为ScaleTransform 不是其逻辑子代的一部分,而是分配给其他属性(在本例中为RenderTransform 属性)的值。

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

    Storyboard.SetTarget(danim1, rect1);
    Storyboard.SetTargetProperty(danim1, 
        new PropertyPath("RenderTransform.(ScaleTransform.ScaleX)"));
    

    试过了,它可以工作,即使我自己并不完全理解 MSDN 的报价:-)

    【讨论】:

    • 实际上,我收到此错误:无法解析属性路径“RenderTransform.(ScaleTransform.ScaleX)”中的所有属性引用。验证适用的对象是否支持这些属性。您确定您正确复制/粘贴了您的工作代码吗?
    • 不确定,我实际上发现了一个复制/粘贴错误,我在 17 分钟前纠正了该错误。
    • 仍然不适合您?我向你保证,它适用于 .NET 4 和 VS2010。
    • 不幸的是,使用 .NET 3.5 SP1 的 VS2008 对我不起作用。我仍然收到该错误。
    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2023-04-07
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多