private void OnKeyDown(object sender, KeyEventArgs e) { if (Settings?.IsReadOnlyMode == true) { return; } if (Readonly) { return; } if (e.Key == Key.Enter || e.Key == Key.Tab) { var text = TagCtrl.CaretPosition.GetTextInRun(LogicalDirection.Backward); if (string.IsNullOrWhiteSpace(text) && e.Key == Key.Enter) { e.Handled = true; } else if (string.IsNullOrWhiteSpace(text) && e.Key == Key.Tab) { e.Handled = false; } else { TagSource.Add(text); e.Handled = true; Changed?.Invoke(this); } AutocompletePopup.IsOpen = false; } }
private void AutocompleteContent_Selected(object sender, RoutedEventArgs e) { if (Settings?.IsReadOnlyMode == true) { return; } if (AutocompleteContent.SelectedIndex >= 0 && AutocompleteContent.SelectedValue != null) { var tag = (string)AutocompleteContent.SelectedValue; TagSource.Add(tag); Changed?.Invoke(this); AutocompletePopup.IsOpen = false; } }
private void ShowTagChooser() { void Update(string name, bool check) { if (check) { if (TagSource.Any(t => t.ToLower() == name.ToLower())) { return; } TagSource.Add(name); TriggerChanged(name); } else { var rm = TagSource.FirstOrDefault(t => t.ToLower() == name.ToLower()); if (rm != null) { TagSource.Remove(rm); TriggerChanged(name); } } } List <CheckableTag> tags = Repository.EnumerateAllTags().Distinct().OrderBy(p => p.ToLower()).Select(p => new CheckableTag(p, Update)).ToList(); if (tags.Count == 0) { return; // no tags } foreach (var tm in TagSource) { foreach (var t in tags.Where(p => p.Name.ToLower() == tm)) { t.Checked = true; } } TagChoosePopupList.ItemsSource = tags; TagChoosePopup.IsOpen = true; }