gpt4 book ai didi

c# - ScaleTransform 中的 DoubleAnimation

转载 作者:太空狗 更新时间:2023-10-29 21:30:59 24 4
gpt4 key购买 nike

作为展览,我正在尝试在 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)"; 所有关于?这些数字代表什么?

最佳答案

这是交易,这是来自 MSDN 的 Storyboards Overview 的引述条目,在标题为“您可以在哪里使用 Storyboard?”的部分中:

A Storyboard can be used to animate dependency properties of animatable classes (for more information about what makes a class animatable, see the Animation Overview). However, because storyboarding is a framework-level feature, the object must belong to the NameScope of a FrameworkElement or a FrameworkContentElement.

这让我想到 ScaleTransform 对象不属于任何 FrameworkElementNameScope。尽管 Rectangle 是一个 FrameworkElement,但由于 ScaleTransform 不是其逻辑子项的一部分,而是分配给某些其他属性的值(在本例中为 RenderTransform 属性)。

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

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

试过了,它起作用了,尽管我自己并不完全理解来自 MSDN 的引述:-)

关于c# - ScaleTransform 中的 DoubleAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com