Skip to content

Instantly share code, notes, and snippets.

@dtchepak
Created June 28, 2011 03:42
Show Gist options
  • Save dtchepak/1050445 to your computer and use it in GitHub Desktop.
Save dtchepak/1050445 to your computer and use it in GitHub Desktop.
Observing combinations of events where another event does not occur
var mouseDown = Observable.FromEventPattern(firstButton, "MouseDown");
var mouseUp = Observable.FromEventPattern(firstButton, "MouseUp");
var mouseMove = Observable.FromEventPattern(firstButton, "MouseMove");
mouseDown.Subscribe(x => Debug.WriteLine(">>> mouse down"));
mouseUp.Subscribe(x => Debug.WriteLine(">>> mouse up"));
(from down in mouseDown
from up in mouseUp.TakeUntil(mouseMove)
select up)
.Subscribe(x => Debug.WriteLine(">>> mouse down then up without move"));
@xerxesb
Copy link

xerxesb commented Jun 28, 2011

...and the same thing as done in WPF:

        var thumb = (Thumb)AdjustmentSlider.Template.FindName("TrackThumb", AdjustmentSlider);

        var mouseButtonDown = Observable.FromEventPattern<MouseButtonEventHandler, MouseButtonEventArgs>(x => thumb.PreviewMouseLeftButtonDown += x, x => thumb.PreviewMouseLeftButtonDown -= x);
        var mouseButtonUp = Observable.FromEventPattern<MouseButtonEventHandler, MouseButtonEventArgs>(x => thumb.PreviewMouseLeftButtonUp += x, x => thumb.PreviewMouseLeftButtonUp -= x);
        var sliderValueChanged = Observable.FromEventPattern<RoutedPropertyChangedEventHandler<double>, RoutedPropertyChangedEventArgs<double>>(x => AdjustmentSlider.ValueChanged += x, x => AdjustmentSlider.ValueChanged -= x);

        var clickWithoutToggling =
            from md in mouseButtonDown
            from mu in mouseButtonUp.TakeUntil(sliderValueChanged)
            select mu;

        clickWithoutToggling.Subscribe(x => ToggleGranularity());

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment