我想制作一个动画,其中一个对象将从一个网格单元格移动到另一个网格单元格。我尝试计算对象的位置,但这不起作用(它给了我错误的值)。以下是有兴趣的代码:
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>
答案 0 :(得分:1)
如果您不需要同时设置1000个对象的动画效果,那么最好创建一个新 UI元素,该元素显示在Source
元素的顶部并移动到Destination
在动画完成后,该元素消失,Source
和Destination
元素属性按要求更改。
我个人认为使用XAML更容易,对我来说似乎更清楚。以下是使用示例:Animation XAML
基本思想是,在TextBlock
标记下声明动画,并将其绑定到某个依赖属性,该属性的更改将在所需的时刻启动动画。