public static IObservable<object> GetNavigateObservable(ListBox lb) { var downs = lb.Events().PreviewMouseLeftButtonDown.Select(e => new { lb.SelectedItem, IsLbFocused = GetIsLbFocused(lb) }); var ups = lb.Events().MouseLeftButtonUp.Select(e => new { lb.SelectedItem, isItem = !(e.OriginalSource is ScrollViewer)}); return downs.Select(x => ups.Take(1).Select(y => new {x, y})).Merge() .Where(item => item.y.isItem && item.y.SelectedItem == item.x.SelectedItem && item.x.IsLbFocused).Select(item => item.x); }