如何:在Silverlight 4中为MVVM ViewModel属性设置动画?

| 我想问一下如何在Silverlight中为MVVM视图模型上的属性设置动画。例如,这里我在XAML中有一个典型的Storyboard声明:
  <DoubleAnimation
                    Storyboard.TargetName=\"yearSlider\"
                    Storyboard.TargetProperty=\"Value\"
                    From=\"1990\" To=\"2012\" Duration=\"0:0:8\" />
现在,假设我不想在Slider yearSlider上设置Value属性,而是想在MVVM视图模型上为CLR(非依赖)属性\“ Year \”设置动画。例如,如果将我的viewmodel设置为DataContext,则代码可能如下所示:
  <DoubleAnimation
                    Storyboard.BindingSource=\"{Binding}\"
                    Storyboard.TargetProperty=\"Year\"
                    From=\"1990\" To=\"2012\" Duration=\"0:0:8\" />
当然,Storyboard上没有这样的\“ BindingSource \”属性,但这应该有助于说明我正在尝试执行的操作。 Silverlight 4中是否有任何机制可以完成使MVVM viewmodel属性动画化的任务,而无需在背后的代码中添加代码?
已邀请:
是。你可以这样做。 MVVM中的属性必须是依赖项属性,而不是常规属性。因此,您的MVVM必须继承自DependencyObject,然后您可以创建可以动画化的依赖项属性。
public class MyViewModel : DependencyObject
{
  public static readonly DependencyProperty YearProperty = 
    DependencyProperty.Register(
    \"Year\", typeof(int),
    typeof(MyViewModel), null
    );

  public int Year
  {
    get { return (int)GetValue(YearProperty); }
    set { SetValue(YearProperty, value); }
  }
}
然后,您的XAML如下所示:
<DoubleAnimation
   Storyboard.Target=\"{Binding}\"
   Storyboard.TargetProperty=\"Year\"
   From=\"1990\" To=\"2012\" Duration=\"0:0:8\" />
试试看,让我知道是否可行。 如果不是,请尝试摆弄它,直到您弄清楚如何使用DoubleAnimation满足绑定要求。也许您可以背负范围内的另一个元素:
<TextBlock x:Name=\"YearLabel\" Text=\"{Binding Year}\" />
<DoubleAnimation
   Storyboard.TargetName=\"YearLabel\"
   Storyboard.TargetProperty=\"DataContext.Year\"
   From=\"1990\" To=\"2012\" Duration=\"0:0:8\" />
注意我们如何修改\“ DataContext.Year \”。它不必是TextBlock。可以是任何具有名称的元素...例如RootLayout Grid。

要回复问题请先登录注册