В настоящее время я разрабатываю игру на C # для платформы Surface (.NET 4.0) с использованием MVVM Light.Я ищу способ включить динамические PointAnimations (перевод) в проект MVVM (или выяснить, что это невозможно).Я не пурист MVVM, но если он может быть встроен в MVVM, тем лучше.
Визуально я пытаюсь автоматически перевести ScatterViewItem в другое место в ScatterView.Новое местоположение рассчитывается после того, как пользователь нажимает кнопку на поверхности.
Я использовал RelayCommands и знаю о различном использовании событий Messenger и RaisePropertyChanged, но я не могу понять, куда идут анимации.Данные для их построения находятся во ViewModel, но, очевидно, анимации будут воспроизводиться во View.Так что, если это вообще возможно, я не понимаю, какие части должны идти куда, или я должен как-то построить их в ViewModel, а затем отправить список в View?
Я видел только анимацию на основе XAML в сочетании с MVVM Light (презентация / пример Лорана Буньона MIX11).Так что, возможно, я виновен в совершении MVVM-ереси, в этом случае мне, возможно, придется отказаться от MVVM.
В моем проекте, не связанном с MVVM, я использую следующий код, который работает очень хорошо:
private void btnStartAnimation_Click(object sender, RoutedEventArgs e)
{
PointAnimation oPointAnimation;
oPointAnimation = new PointAnimation();
oPointAnimation.From = new Point(GreenOne.ActualCenter.X, GreenOne.ActualCenter.Y);
oPointAnimation.To = new Point(GreenOne.ActualCenter.X + 300, GreenOne.ActualCenter.Y);
oPointAnimation.FillBehavior = FillBehavior.HoldEnd;
oPointAnimation.Duration = TimeSpan.FromSeconds(1);
oPointAnimation.Completed += new EventHandler(OnAnimation_Completed);
GreenOne.BeginAnimation(ScatterViewItem.CenterProperty, oPointAnimation,HandoffBehavior.SnapshotAndReplace);
}
//make it hold its position and make it movable again
private void OnAnimation_Completed(object sender, EventArgs e)
{
Point center = GreenOne.ActualCenter;
GreenOne.BeginAnimation(ScatterViewItem.CenterProperty, null);
GreenOne.Center = center;
}