我正在寻找关于WPF动画的最佳实践或指导方针,特别是有关性能注意事项的信息。
在我提出这个问题后,我在这个领域获得了更多的经验,所以我会自己回答这个问题。我的经验来自于在WPF思维导图应用程序NovaMind上的工作 - 我们最近为我们NovaMind Platinum中的Presenter功能做了很多动画 :-)
MSDN关于优化WPF应用程序性能的部分提供了一些有用的信息,涉及编写WPF应用程序时的一般考虑事项:
http://msdn.microsoft.com/en-us/library/aa970683.aspx
以下是一些与动画相关的特别有用的部分:
CompositionTarget.Rendering事件会导致WPF不断进行动画。如果使用此事件,请在每个机会上分离它。
当您使用Brush来设置元素的Fill或Stroke时,最好设置Brush.Opacity值,而不是设置元素的Opacity属性。修改元素的Opacity属性可能会导致WPF创建临时表面。
在某些情况下,您可以更新Transform而不是将其替换为RenderTransform属性的值。这在涉及动画的场景中尤其如此。通过更新现有的Transform,您可以避免启动不必要的布局计算。
以下是我通过试错学到的内容:
我还听说,通过重写容器中的 OnRender 并使用 drawingContext 直接渲染它们而不是将它们添加到可视树中,可以更快地渲染许多小对象。在我的场景中(渲染约 300 个椭圆几何图形时),实践证明这并没有什么区别,但在某些情况下可能有所帮助。理论听起来很可靠。
最后,我发现 WPF 内置的动画类过于繁琐,使用动画库Artefact Animator的体验更加愉快且成功率更高。真的,试试看吧。(它也适用于 Silverlight)这才是代码动画应该具备的样子。
但并非一切都是美好的。当以更高的分辨率全屏运行时,我仍然发现很难创建真正流畅的动画。关于这个问题如何确定动画为什么会卡顿? - 我会感激任何意见。
祝好,祝好运,如果您有cool的展示,请告诉我 :)