我是一個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