场景:我有一个(数字)文本框,一个按钮和一个标签。单击按钮时,我希望标签“动画”为文本框中的数值(如旋转拨号盘)
假设:
a)故事板中的动画不能有数据绑定(因为它们不是FrameworkElements) b)Silverlight中缺少触发器
视图模型与视图故事板的最佳耦合是什么,更新目标动画值并在单击按钮时启动动画的方法是什么?
注意:场景是概念性的,所以不要专注于“动画”数字或其他任何内容的细节
答案 0 :(得分:2)
如果你的目标是严格减少视图中的代码隐藏,我认为Label上的附加行为对此有用。标签上附加的行为将公开要动画的数字,当此数字更改时,动画(在代码中)将运行以从旧值动画到新值。
一个缺点是你的动画现在是代码,除非你在一个资源文件中存储一个模板化的(只有伪开始的值)版本,你可以根据需要加载它并替换模板化的值。 / p>
这article from Josh Smith似乎是附加行为的权威;
http://joshsmithonwpf.wordpress.com/2008/08/30/introduction-to-attached-behaviors/
答案 1 :(得分:0)
我最近不得不解决MVVM应用程序中的类似问题。我的问题是我需要将容器的高度从零动画到自动。由于Auto是一个动态值,我认识到需要根据需要构建(或操纵)动画(或故事板)。我实施的解决方案涉及使用视图代码隐藏来更新和触发动画。
这不是MVVM最友好的方法;但是,在XAML中,WPF中的动画可能很棘手。由于此解决方案实际上只是XAML限制的解决方法,因此将代码直接绑定到视图似乎是可以的。同样,如果视图被模拟,那么就没有动画的框架元素,所以将这些代码放在VM端真的没有意义。
有人有更好的方法吗?