使用MVVM-Light在Microsoft Surface中动态PointAnimation

时间:2012-02-01 15:57:08

标签: c# animation dynamic mvvm-light pixelsense

我目前正在使用MVVM Light为Surface平台(.NET 4.0)开发C#游戏。我正在寻找一种方法将动态PointAnimations(翻译)合并到一个MVVM项目中(或者发现它不可能)。我不是MVVM纯粹主义者,但如果能够适应MVVM,那就更好了。

在视觉上我正在尝试将ScatterViewItem自动转换为ScatterView上的另一个位置。用户按下Surface上的按钮后,将计算新位置。

我使用过RelayCommands,知道Messenger和RaisePropertyChanged事件的不同用途,但我无法弄清楚动画的去向。构建它们的数据在ViewModel中,但显然动画将在View中播放。所以如果可能的话,我不知道哪些部分应该去哪里,或者我应该以某种方式在ViewModel中构建它们,然后将列表发送到View?

我只看过基于XAML的动画加上MVVM Light(Laurent Bugnion的MIX11演示/样本)。所以也许我犯了MVVM-heresy,在这种情况下我可能不得不放弃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;


    } 

0 个答案:

没有答案