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

标签 wpf wpf-4.0

我有几年循环游戏编程的背景。我非常习惯在应用程序中使用恒定循环,它不断调用 Update 和 Draw 等函数,从而允许我通过每帧增加一点值来执行动画等操作。

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

冒着过于模糊的风险,我将提供我当前的问题作为示例。 Windows 8 发布后,我对语义缩放的想法非常着迷。在广泛使用“开始屏幕”后,我开始为 Microsoft Surface 开发 Semantic Zoom 到 WPF4.0 的端口(我在工作中使用 Surface)。我只是想要一个简单的示例,它允许我使用捏合手势在一堆 View 中上下导航。

花了很多时间试图理解操作事件(我不会详细讨论这个...... bleh),我终于得到了基于捏合手势的 View 缩放。如果它超过某个点,我会跳回“缩小” View 。很酷。但是,问题是,如果用户没有完成手势并决定不缩小,我就会看到较小的 View 。我想要动画 View 的比例,使其不断从用户捏合中“反弹”并恢复到 1 的比例。我知道如果这是基于循环的,我只需将 Lerp 调整为每帧 1。但由于 WPF 都是基于事件的,所以我有点迷失。

使用惯性或不同的操纵事件可能可以解决这个特定问题(我很高兴听到它),但此外我只是想知道如何重新定位我的心态以更多地工作在 WPF 中有效。仅仅是知道要订阅哪些事件吗?有没有聪明的方法可以使用动画来完成我想要的事情?我应该使用线程来完成此类任务,还是作弊(这似乎不可靠,而且我对 WPF 中的线程感到不安)?

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

最佳答案

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

关于wpf - 我应该如何在 WPF 中实现非基于事件的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10148569/

相关文章:

c# - ObservableCollection 和 BindingList 的区别

c# - WPF Datagrid 焦点并突出显示最后一行

c# - 如何在网格中设置显示器宽度的 50%?

wpf - MVVM 窗口/区域处理

xaml 样式中的 WPF4 DataGridHeaderBorder

c# - 如何在 WPF 4 中创建翻转控件?

c# - WPF 4 的新特性?

wpf - 如何防止新的STA线程上的非模式窗口关闭

C#-WPF : testing strategies

wpf - 将另一个类的静态方法绑定(bind)为 WPF 控件事件的处理程序