Ada*_*m S 6 .net c# 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>
Run Code Online (Sandbox Code Playgroud)
我的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();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行这个程序时,它什么也没做.矩形保持在144x144.如果我取消动画,只是
ScaleTransform scaly = new ScaleTransform(1.5, 0.5);
rect1.RenderTransform = scaly;
Run Code Online (Sandbox Code Playgroud)
它会立即拉长它,没问题.其他地方有问题.有什么建议?我已经阅读了http://www.eggheadcafe.com/software/aspnet/29220878/how-to-animate-tofrom-an.aspx上的讨论,其中有人似乎已经获得了纯XAML版本,但代码那里没有显示.
编辑:在代码问题中应用动画ScaleTransform似乎有人有一个非常类似的问题,我很好用他的方法工作,但到底是什么string thePath = "(0).(1)[0].(2)";呢?这些数字代表什么?
这是交易,这是MSDN的故事板概述条目引用的标题为"你在哪里可以使用故事板?"的部分:
故事板可用于为可动画类的依赖属性设置动画(有关使类可动画的内容的更多信息,请参阅动画概述).但是,由于故事板是一种框架级功能,因此该对象必须属于FrameworkElement的NameScope或FrameworkContentElement.
这让我觉得这个ScaleTransform对象不属于NameScope任何对象FrameworkElement.即使它Rectangle是a FrameworkElement,因为ScaleTransform它不是其逻辑子元素的一部分,而是分配给某些其他属性的值(在本例中为RenderTransform属性).
要解决这个问题,您需要以PropertyPath不同方式指定目标对象,因此:
Storyboard.SetTarget(danim1, rect1);
Storyboard.SetTargetProperty(danim1,
new PropertyPath("RenderTransform.(ScaleTransform.ScaleX)"));
Run Code Online (Sandbox Code Playgroud)
虽然我不完全理解MSDN自己的引用,但尝试了它并且它有效:-)
| 归档时间: |
|
| 查看次数: |
10998 次 |
| 最近记录: |