私は次のものを持っています
var leftMouseDown = Observable.FromEvent<MouseButtonEventArgs>(displayCanvas, "MouseLeftButtonDown");
var leftMouseUp = Observable.FromEvent<MouseButtonEventArgs>(displayCanvas, "MouseLeftButtonUp");
var mouseMove = Observable.FromEvent<MouseEventArgs>(displayCanvas, "MouseMove");
var leftMouseDragging = from down in leftMouseDown
let startPoint = down.EventArgs.GetPosition(displayCanvas)
from move in mouseMove.TakeUntil(leftMouseUp)
let endPoint = move.EventArgs.GetPosition(displayCanvas)
select new { Start = startPoint, End = endPoint };
サブスクライブすると、ドラッグの開始点と現在の終了点が得られます。ドラッグが完了したら、何かをする必要があります。RXでこれを完全に実行しようとして失敗し、最終的に実行しました
leftMouseDragging.Subscribe(value=>
{
dragging = true;
//Some other code
});
leftMouseUp.Subscribe(e=>
{
if(dragging)
{
MessageBox.Show("Just finished dragging");
dragging = false;
}
});
マウスの右ボタンをドラッグするまで、これは正常に機能します。次に、マウスの左ボタンをクリックすると、メッセージ ボックスが表示されます。左ボタンのドラッグのみを行うと、メッセージ ボックスが表示され、マウスの左ボタンをクリックしてもボックスが生成されません。外部状態なしでこれを行いたいのですが、少なくともそれが適切に機能することを望んでいます。
参考:ドラッグを揮発性にしてロックを使用しようとしましたが、うまくいきませんでした。
編集
私の問題は右クリックのコンテキストメニューにあったことがわかりました。それを取り除くと、上記のコードが機能しました。だから、今私の問題は、コンテキストメニューを表示し、コードを機能させる方法です。コンテキスト メニューがマウスの左クリックを処理していたため、何らかの理由でコードが機能しなかったと思いますが、まだ困惑しています。