微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何:在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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。