我应该如何在WPF中实现非基于事件的操作?

时间:2012-04-13 21:30:56

标签: wpf wpf-4.0

我来自循环游戏编程的几年背景。我非常习惯在我的应用程序中有一个常量循环,它不断调用Update和Draw等函数,允许我通过逐帧递增值来执行动画等动作。

现在我有一份涉及WPF的工作,但我发现我太依赖于那个系统了。也许我对WPF的感觉有限,但似乎一切都是基于事件的。用户单击一个按钮,您通知代码,代码操纵值。值更改,代码通知UI,UI更新布局。它适用于基于GUI的应用程序编程,但我发现当我遇到基于循环的游戏编程中微不足道的情况时,我陷入困境,无法找到实现简单行为的好方法。

冒着太模糊的风险,我会以当前的问题为例。在Windows 8推出后,我非常迷恋语义缩放的想法。在广泛使用了“开始屏幕”之后,我开始使用语义缩放到WPF4.0 for Microsoft Surface的端口(我在工作时使用Surface)。我只想要一个简单的例子,它允许我使用捏合手势在一堆视图中上下导航。

花了很多时间试图理解操纵事件(我不会进入那个......),我终于根据捏合手势进行了视图缩放。如果它超过某个点,我会跳回到“缩小”视图。很酷。但问题是,如果用户没有完成手势并决定不缩小,我会留下较小的视图。我想动画视图的比例,以便从用户捏合和恢复到1的比例不断“反弹”。我知道如果这是基于循环的,我只是Lerp朝向每帧1。但由于WPF都是基于事件,我有点迷失。

使用惯性或不同的操纵事件可能会解决这个特定的问题(我很乐意听到它),但另外我只想知道如何重新定位我的思维方式以更多地工作在WPF中有效。它只是知道要订阅哪些事件?是否有聪明的方法使用动画来做我想要的?我应该使用线程来完成这些任务,还是作弊(看起来不可靠,加上我对WPF中的线程不稳定)?

这个问题是我在WPF中有效的最大障碍之一,我认为(好吧,这还不太了解MVVM,还在努力)。我希望它能够被拆除,并且能够在基于循环的游戏编程中发挥作用。

1 个答案:

答案 0 :(得分:0)

虽然我非常确定你想要做的大部分内容都可以基于事件的方式完成,但您可能需要查看MSDN How to: Render on a Per Frame Interval Using CompositionTarget。另请注意最后一节每帧动画:绕过Property Animation Techniques Overview中的动画和计时系统

相关问题