首页 > 解决方案 > 为用户控件绘制的 Helix Toolkit 控件设置动画

问题描述

我正在尝试实现与此非常相似的东西:

带有 Helix 工具包的 WPF,使用代码隐藏制作动画?

但是,我的情况略有不同。我正在尝试对由路径(TubePath)定义的管(曲线)进行动画处理,该路径作为由数学函数(以数值计算)定义的时间(动画)的函数而发生变形。

我的设计/计划是使用用户控件(包含 Helix Tube 控件)来绘制由路径定义的管的每一帧。我计划在我的用户控件中创建 TubePath 属性,它是一个 oservablecollection 依赖属性。我计划通过将 ViewModel 的 CurrentPath 属性绑定到 usercobtrol TubePath 属性来从我的 ViewModel(或 View)控制动画。我计划从 INotifyPropertyChanged 驱动我的 ViewModel。在我的模型中启动动画之前,我将存储路径列表 (PathList)。在每个(所谓的)时间或动画步骤中,我会将相应的路径从 PathList 复制到 VieModel 中的 CurrentPath。我希望 ViewModel 中 CurrentPath 集合的更改将激活绑定,这将强制用户控件更新用户控件绘制的管。

这些是我的问题:

(1) 我读到并非所有对 ObservableCollection 的更改都会触发 propertychanged 事件。覆盖或引用 ViewModel 中的整个 CurrentPath 集合会更新 UserControl 中的 TubePath,这将强制重绘曲调吗?我必须做任何特别的事情来实现这种绑定吗?

(2) 我是 WPF 和 WPF 动画的新手。我的研究表明,我可以通过多种方式从 ViewModel 制作动画:使用上面给出的示例中的 Dispatcher.Invoke(),或者我可以使用 RenderingEventManager.AddListener()(和 RenderingEventManager.RemoveListener() 来停止动画) 由 Helix Toolkit 提供,就像在此处的示例中所做的那样:

https://github.com/helix-toolkit/helix-toolkit/tree/develop/Source/Examples/WPF/ExampleBrowser/Examples/Wind

或者我可以使用 DispatcherTimer() 循环,如下所示:

自定义用户控件的 DependencyProperty 绑定未在更改时更新

任何关于最佳方法的建议以及我从 ViewModel 驱动动画的概念将不胜感激。

标签: wpfdata-bindinguser-controlsdependency-propertieshelix-3d-toolkit

解决方案


推荐阅读