private void Acts_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == "CurrentItem") { // since we can get event while GingerRunner is on another thread we need dispatcher ActionsListBox.Dispatcher.Invoke(() => { ActionsListBox.SelectedItem = mActivity.Acts.CurrentItem; ActionsListBox.Refresh(); }); } }
private void InputBox_OnPreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { if (_mainWindowViewModel.SelectedAction == null) { _mainWindowViewModel.ExecuteActionWhenAvailable = true; } else { if ((e.KeyStates & KeyStates.Down) == KeyStates.Down) { _mainWindowViewModel.ExecuteSelectedAction(); } } return; } if (e.Key == Key.Tab) { e.Handled = true; if (_mainWindowViewModel.SelectedAction == null) { if (string.IsNullOrEmpty(_mainWindowViewModel.Query)) { _mainWindowViewModel.UpdateActions(); } } else { _mainWindowViewModel.AccumulatedActions.Add(_mainWindowViewModel.SelectedAction.Action); _mainWindowViewModel.PreviousQueries.Push(_mainWindowViewModel.Query); _mainWindowViewModel.Query = string.Empty; } return; } if (e.Key == Key.Back && string.IsNullOrEmpty(_mainWindowViewModel.Query) && _mainWindowViewModel.AccumulatedActions.Count > 0) { _mainWindowViewModel.AccumulatedActions.RemoveAt(_mainWindowViewModel.AccumulatedActions.Count - 1); if (_mainWindowViewModel.PreviousQueries.Count > 0) { _mainWindowViewModel.Query = _mainWindowViewModel.PreviousQueries.Pop(); InputBox.SelectionStart = InputBox.Text.Length; } _mainWindowViewModel.UpdateActions(); e.Handled = true; return; } if (e.Key == Key.Escape) { HideMe(); return; } var itemCount = _mainWindowViewModel.Actions.Count; if (itemCount > 0) { int index; if (e.Key == Key.Down) { index = ActionsListBox.SelectedIndex + 1; } else if (e.Key == Key.Up) { index = ActionsListBox.SelectedIndex - 1; } else { return; } if (index < 0) { index += itemCount; } ActionsListBox.SelectedIndex = index % itemCount; ActionsListBox.ScrollIntoView(_mainWindowViewModel.SelectedAction); } }