我正在寻找任何有关WPF动画的最佳做法或指导方针。尤其是关于性能考虑的信息Wpf动画最佳做法
回答
自从我提出这个问题后,我在这个领域获得了更多的经验后,我会自己回答。我的经验来自于WPF思维导图应用NovaMind工作 - 我们在NovaMind铂金做了很多动画最近我们Presenter feature :-)
的MSDN节上优化WPF应用程序性能有大约一般考虑一些有用的信息写入时WPF应用程序:
http://msdn.microsoft.com/en-us/library/aa970683.aspx
这里有一些位,我发现非常有用和相关的动画:
CompositionTarget.Rendering事件会导致WPF持续动画。如果你使用这个事件,请在每个机会上分离它。
当您使用画笔设置元素的填充或笔画时,最好设置Brush.Opacity值而不是设置元素的“不透明度”属性。修改元素的不透明度属性可以使WPF创建一个临时表面。
您可能能够更新转换而不是将其替换为RenderTransform属性的值。在涉及动画的场景中尤其如此。通过更新现有的变换,可以避免启动不必要的布局计算。
下面是我通过不断摸索掌握:
- 说,你有几个要素与影响,如BlurEffect应用。这是方式更快地将效果应用于这些元素的容器,而不是元素本身。尽管效果是硬件加速的,但WPF似乎并不善于处理一些带有效果的小项目。 - 如果不需要相同的模糊半径,并且无法将它们组合到应用了效果的容器中,则将元素呈现为位图(以软件形式)然后为位图制作动画(如果可能) 。对物体产生影响(或不透明度)可快速杀死动画时的表现。
- 设置画笔上的不透明度而不是元素(如上所述)在动画对象时会产生巨大的性能差异。
- 保持视觉效果的数量减少。即使使用上述技巧,动画化大量粒子也很困难。在这种情况下,您可能需要恢复为WriteableBitmap。
我也听说通过在容器中重写OnRender来呈现许多小对象,然后使用drawingContext呈现它们,而不是直接将它们添加到可视化树中,这样会更快。实际上,在我的场景中(在渲染大约300个椭圆几何时)没有任何区别,但在某些场景中可能会有所帮助。这个理论听起来很可靠
最后,我发现WPF中内置的动画类过于繁琐,并且使用动画库的劣势获得更多乐趣和成功:Artefact Animator。真的,试试看吧。(它也可用于Silverlight)这是什么动画(在代码中)应该是这样的。
虽然不是彩虹和独角兽。在高分辨率下运行全屏时,我仍然发现无法创建真正流畅的动画。更多关于我的问题How to know why an animation stutters? - 我将不胜感激任何输入。
欢呼,祝你好运,如果你有什么酷炫的东西,让我知道:)
- 1. 动画最佳做法
- 2. WPF XAML - DataTriggers或ValueConverters?最佳做法
- 3. WPF异步验证的最佳做法?
- 4. 反应本地动画示例违反最佳做法?
- 5. iPhone使用UIImageView的大量动画的最佳做法
- 6. HTML5画布 - 移动物体的最佳做法
- 7. RabbitMQ - 最佳做法
- 8. 最佳做法response.getOutputStream
- 9. estimatedHeightForRowAtIndexPath最佳做法
- 10. 最佳做法applicationDidEnterBackground
- 11. 最佳做法UIScrollView
- 12. ActionListener最佳做法
- 13. CLLocationManager最佳做法
- 14. 做画布动画时最佳FPS是多少?
- 15. JavaMail编程最佳或最佳做法
- 16. django动态导航的最佳做法?
- 17. 连接活动的Android最佳做法
- 18. 自动登录最佳做法
- 19. 动画wxDC涂料的最佳方法
- 20. 最好的办法做翻转动画
- 21. 类的最佳做法
- 22. Ember ArrayProxy的最佳做法
- 23. UIViewController最佳做法 - 加载
- 24. C#继承最佳做法
- 25. SharePoint列表最佳做法
- 26. 以最佳做法登录?
- 27. Rails的最佳做法
- 28. 类别最佳做法
- 29. Sqlite的最佳做法Android
- 30. 最佳做法与MySQL