动画网格单元格

时间:2011-08-14 19:50:27

标签: c# wpf animation

我想制作一个动画,其中一个对象将从一个网格单元格移动到另一个网格单元格。我尝试计算对象的位置,但这不起作用(它给了我错误的值)。以下是有兴趣的代码:

Point locationToScreen = (((e.Source as Button).Content as Viewbox).Child as Label).PointToScreen(new Point(0, 0));

PresentationSource source = PresentationSource.FromVisual((((e.Source as Button).Content as Viewbox).Child as Label));
Point pt = source.CompositionTarget.TransformFromDevice.Transform(locationToScreen);

Point a = (letters.Children[_words[_index].Index] as TextBlock).PointToScreen(new Point(0, 0));

PresentationSource sos = PresentationSource.FromVisual((letters.Children[_words[_index].Index] as TextBlock));
Point pt2 = sos.CompositionTarget.TransformFromDevice.Transform(a);

TranslateTransform tt = new TranslateTransform();
(((e.Source as Button).Content as Viewbox).Child as Label).RenderTransform = tt;
DoubleAnimation da1 = new DoubleAnimation(0, -(pt.Y - pt2.Y)/2, new Duration(TimeSpan.FromSeconds(1)));
DoubleAnimation da2 = new DoubleAnimation(0, -(pt.X - pt2.X)/2, new Duration(TimeSpan.FromSeconds(1)));
tt.BeginAnimation(TranslateTransform.YProperty, da1);
tt.BeginAnimation(TranslateTransform.XProperty, da2);

那我该怎么做呢?有没有简单的方法将对象从一个容器移动到另一个容器?<​​/ p>

1 个答案:

答案 0 :(得分:1)

如果您不需要同时设置1000个对象的动画效果,那么最好创建一个 UI元素,该元素显示在Source元素的顶部并移动到Destination在动画完成后,该元素消失,SourceDestination元素属性按要求更改。

我个人认为使用XAML更容易,对我来说似乎更清楚。以下是使用示例:Animation XAML

基本思想是,在TextBlock标记下声明动画,并将其绑定到某个依赖属性,该属性的更改将在所需的时刻启动动画。