【发布时间】:2011-10-12 13:13:30
【问题描述】:
我正在尝试在我的 Silverlight UI 中实现延迟的 MouseEnter 事件处理程序。使用 DispatcherTimer 等以“经典”方式完成此操作后,我现在正尝试使用 Reactive 扩展来做同样的事情。这应该更简洁易读,但不知怎的我无法实现目标,即:
- 当鼠标进入某个UI控件时,需要调用一个方法,
- 但它应该只在经过一定时间后完成,即 1000 毫秒,在此期间鼠标保持在控件内
- 因此,如果鼠标在此之前离开控件,则什么都不会发生,事件应该被“取消”
我浏览了 RX 文档,该文档相当抽象,而且几乎不存在这种实用类型的示例。根据网上找到的一些例子,我想出了这样的事情:
Observable.Throttle(
Observable.FromEventPattern(LanguageSelector, "MouseEnter"), TimeSpan.FromSeconds(2))
.TakeUntil(Observable.FromEventPattern(LanguageSelector, "MouseLeave"))
.ObserveOnDispatcher()
.Subscribe(e =>
{
ShowPopup();
});
它似乎工作正常,但只有一次。一旦鼠标离开控件,它将不再起作用,我的弹出窗口不再被触发。关于如何做到这一点有更好的想法吗?
提前致谢!
【问题讨论】:
标签: silverlight system.reactive