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);
 }