Обнаружение событий MouseDown и MouseMove с помощью Reactive Extensions

1

У меня есть следующий код, чтобы прослушать запуск события перетаскивания из WPF ListView. Идея состоит в том, что за событием мыши будет следовать ход мыши. Как только мышь переместится больше, чем минимальное расстояние, начнется действие перетаскивания.

var mouseDowns = Observable.FromEventPattern<MouseEventArgs>(this, "PreviewMouseDown");
        var mouseMoves = Observable.FromEventPattern<MouseEventArgs>(this, "MouseMove").
            Where(
                x =>
                    x.EventArgs.LeftButton == MouseButtonState.Pressed ||
                    x.EventArgs.RightButton == MouseButtonState.Pressed);

        var drag = from mouseDown in mouseDowns
                   from mouseMove in mouseMoves
                   let initialPosition = mouseDown.EventArgs.GetPosition(null)
                   let currentPosition = mouseMove.EventArgs.GetPosition(null)
                   let mouseDifference = initialPosition - currentPosition
                   //where
                   //    (Math.Abs(mouseDifference.X) > MinimumDragDistance ||
                   //    Math.Abs(mouseDifference.Y) > MinimumDragDistance)
                   select mouseDifference;


        dragSubscription = drag.Subscribe(_ =>
         {
             Debug.WriteLine(string.Format("x: {0} y: {1}", _.X, _.Y));
             var dataObject = GetDataObject();
             DragDrop.DoDragDrop(this, dataObject, DragDropEffects.Move);
         });

Проблема в том, что в Linq всякий раз, когда событие PreviewMouseDown срабатывает, отвечающее критериям, происходит только одно событие mouseMove, что означает, что когда я включаю оператор where в список, mouseDifference всегда равен 0, что не соответствует условию,

Есть ли способ разрешить несколько событий mouseMove, до тех пор, пока не произойдет соответствие критериям?

Теги:
linq
wpf
system.reactive

1 ответ

0
Лучший ответ

Я смог ответить на вопрос с помощью образца кода в следующем вопросе:

Использование Rx над событиями в WPF UserControl, почему элемент управления получает mousedown и mousemove, когда окно максимизируется?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню