在界面上,中间有一个按钮,周围是Image类型的元素。它看起来像一个 3 x 3 的正方形。当您单击该按钮时,周围的图像应随着每次单击移动一个单元格。比如位于(我用二维数组的语言解释)的图片,它位于距离按钮1 0位置,应该移动到位置0 0,另一张图片从位置0 0移动到位置0 1。
使用这种方法:
image10.BeginAnimation(MarginProperty, new ThicknessAnimation
{
From = new Thickness(99, 66, 361, 212),
To = new Thickness(99, 24, 361, 254),
Duration = TimeSpan.FromSeconds(0.85)
});
我设法在第二次点击之前执行了这样的操作。第二次点击后,图片返回到它们的初始位置并重复第一次点击的动作,但每次点击都必须没有误入歧途,图片会移动一圈。要实现这种方式,我意识到严格访问元素是不可能的,因为我上面写的就出来了。所以问题是,如何在 C# 代码中使用坐标来引用位于给定位置的对象并将其动画化到另一个位置?正如我在 Internet 上阅读的那样,为了搜索和移动,所有对象都必须位于画布上。但是,我会马上说我尝试使用这种方法获取坐标。
Canvas.SetLeft(image10, 0);
Canvas.SetTop(image10, 0);
但是使用这种方式,附加运动动画是行不通的,很重要。
PS 如果您提出一种更简单的方法来实现这个想法,我将不胜感激。
让我们写一个代表“tile”的类:
你会在你的课堂上存储一张图片或一个链接,我只是用一个字符串标签
string Caption现在主要
ViewModel:一般来说,一切都很简单,一个带有“瓷砖”的集合和一个将它们移动到一个圆圈的命令。而且,在这个例子中,
ObservableCollection甚至没有必要使用它,你可以使用通常的List.transitions- 这是一个过渡字典,字典的键是瓦片的初始坐标,值是结束现在让我们开始演示。
让我们写坐标转换器
VM=>View:和
他们定义了一个将从标记中设置的公共属性。
现在是窗口布局本身,我以这个答案为例:
有点歪,但到目前为止。
原则上,这已经可行,但到目前为止,还没有动画。当你点击中间的按钮时,瓷砖会跳来跳去。
现在这整件事都需要动画化,我使用了这个答案。我还不知道如何使用这个辅助类来为两个属性设置动画,所以我创建了两个具有相同内容的类(我会在出现信息后立即更新答案):
AnimatableLeftHelper和AnimatableTopHelper.现在我们使用这些助手来为属性设置动画:
准备好!
在这里,我使用了“标准”类
MVVMWPFVm:RelayCommand:感谢@VladD 的帮助,我们设法使用以下方法重写了示例
PointAnimation:“瓦”:
主页
VM:现在只有一个转换器:
我添加了更多带有偏移量的属性,以便您可以更灵活地调整图块的位置。
窗口布局:
好吧,动画的辅助类:
结果是一样的。