Skip to content

Instantly share code, notes, and snippets.

@emoacht
Created December 13, 2014 16:50
StartListenPointer Sample
private void StartListenPointer()
{
var pointerPressed = Observable.FromEvent<PointerEventHandler, PointerRoutedEventArgs>(
h => (sender, e) => h(e),
h => AssociatedSelector.PointerPressed += h,
h => AssociatedSelector.PointerPressed -= h)
.Where(e => e.Pointer.PointerDeviceType == PointerDeviceType.Mouse);
var pointerMoved = Observable.FromEvent<PointerEventHandler, PointerRoutedEventArgs>(
h => (sender, e) => h(e),
h => AssociatedSelector.PointerMoved += h,
h => AssociatedSelector.PointerMoved -= h);
var pointerUnpressed = Observable.Merge(
Observable.FromEvent<PointerEventHandler, PointerRoutedEventArgs>(
h => (sender, e) => h(e),
h => AssociatedSelector.PointerReleased += h,
h => AssociatedSelector.PointerReleased -= h),
Observable.FromEvent<PointerEventHandler, PointerRoutedEventArgs>(
h => (sender, e) => h(e),
h => AssociatedSelector.PointerCanceled += h,
h => AssociatedSelector.PointerCanceled -= h),
Observable.FromEvent<PointerEventHandler, PointerRoutedEventArgs>(
h => (sender, e) => h(e),
h => AssociatedSelector.PointerCaptureLost += h,
h => AssociatedSelector.PointerCaptureLost -= h));
disposer.Add(pointerMoved
.SkipUntil(pointerPressed.Do(e => OnPointerPressed(e)))
.TakeUntil(pointerUnpressed.Do(e => OnPointerUnpressed(e)))
.Throttle(TimeSpan.FromMilliseconds(10)) // 10 msec throttling
.ObserveOn(SynchronizationContext.Current)
.Repeat()
.Subscribe(e => OnPointerMoved(e)));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment