Динамическая PointAnimation в Microsoft Surface с использованием MVVM-Light - PullRequest
1 голос
/ 01 февраля 2012

В настоящее время я разрабатываю игру на 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;


    } 
...