【问题标题】:C# animation alternativeC# 动画替代
【发布时间】:2015-11-25 06:54:03
【问题描述】:
我试图让 2 个椭圆在屏幕(画布)上移动,坐标来自 2 个 Wiimote 设备。很像老鼠的行为。坐标需要被记录,所以最好在动画方法之后完成。到目前为止,我尝试使用 TranslateTransform,但 Ellipses 的移动非常有问题,不适合用户体验。我也尝试使用 PointAnimation 和 Storyboard,但问题是坐标没有预设,并且每次触发 WiimoteChanged 事件时都会调用该方法,因此在第二种方法中,点根本没有移动,因为事件被触发了数百次每秒。
我有什么选择?
【问题讨论】:
标签:
c#
wpf
user-interface
animation
mouse
【解决方案1】:
我相信您应该通过更改其父位置或相对于父对象的偏移来更改椭圆位置。我创建了一个小例子,红色椭圆跟随鼠标光标,对我来说看起来不错。
您可能应该在某个时刻看向装饰器的方向,以免干扰您的应用程序的主视觉树。
这是代码。只需将其放在新创建的主窗口中即可。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Content = new TestEllipse();
}
public class TestEllipse : Canvas
{
private Ellipse MyEllipse;
public TestEllipse()
{
MyEllipse = new Ellipse() { StrokeThickness = 1, Fill = Brushes.Red, Height = 100, Width = 100 };
this.Children.Add(MyEllipse);
this.Loaded += TestEllipse_Loaded;
}
void TestEllipse_Loaded(object sender, RoutedEventArgs e)
{
var wnd = GetWindow(this);
wnd.MouseMove += wnd_MouseMove;
}
void wnd_MouseMove(object sender, MouseEventArgs e)
{
var coords = e.GetPosition(sender as Window);
Canvas.SetLeft(MyEllipse, coords.X - MyEllipse.Width / 2);
Canvas.SetTop(MyEllipse, coords.Y - MyEllipse.Height / 2);
}
}
}