我是一个Rx新手,想要弄清楚如何用Rx处理鼠标手势。我发现这个解决方案在某处:使用Rx进行鼠标输入 - 制作一系列可观察对象?
var mouseMove = Observable.FromEventPattern<MouseEventArgs>(this, "MouseMove");
var lMouseDown = Observable.FromEventPattern<MouseEventArgs>(this, "MouseDown")
.Where(e => e.EventArgs.Button == MouseButtons.Left);
var lMouseUp = Observable.FromEventPattern<MouseEventArgs>(this, "MouseUp")
.Where(e => e.EventArgs.Button == MouseButtons.Left);
var dragSequence =
from down in lMouseDown
from move in mouseMove.StartWith(down).TakeUntil(lMouseUp)
select move;
dragSequence.ObserveOn(this).Subscribe(e => Trace.WriteLine(e.EventArgs.Location));
但是多个独立的鼠标手势都是同一个流的一部分。所以我不能使用onCompleted的处理程序;该序列从未完成。我希望将流分成每个拖动的单独序列,我该怎么做?
的'dragSequence'的问题从来没有完成,所以我不认为这是有道理的'Concat'什么结束它。虽然'Repeat()'方法给了我一个想法,但... – Qwertie
啊,你是对的。我添加了一个对'TakeUntil(lMouseUp)'的调用,这会在拖动操作完成时导致序列结束。您可以从您的dragSequence定义中删除'.TakeUntil'调用,因为它不再需要。 – Brandon