WPF, RichTextBox проблема в получении правильных свойств текста в позиции курсора - PullRequest
2 голосов
/ 10 марта 2010

Я создаю простой редактор с использованием wpf richtextbox. Этот редактор имеет своего рода кнопки переключения для полужирного, курсивного, подчеркнутого и т. Д., Которые «нажимаются», когда выделенный текст или текст в курсоре имеет свойство подходящего. Я сделал это так:

private TextRange GetSelectedTextRange() {
  if(_richTextBox == null) return null;
  return new TextRange(_richTextBox.Selection.Start, _richTextBox.Selection.End);
}

private void UpdateIsItalic() {
  TextRange selectedTextRange = GetSelectedTextRange();
  if(selectedTextRange == null) {
    IsItalic = false;
    return;
  }
  object fontStyleObject = selectedTextRange.GetPropertyValue(Run.FontStyleProperty);
  if(fontStyleObject is FontStyle) {
    FontStyle fontStyle = (FontStyle)fontStyleObject;
    IsItalic = (fontStyle == FontStyles.Italic || fontStyle == FontStyles.Oblique);
  } else {
    IsItalic = false;
  }
}

Проблема в том, что когда курсор находится в конце строки и отправляет, например, команду ToggleItalic в RichTextBox, значения, которые я получаю из SelectedTextRange.GetPropertyValue, действительны для текста, за которым находится курсор, а не для текст, который я собираюсь напечатать, поэтому я вернусь к тому же значению, что и перед командой. Но я хочу, чтобы при отправке команды ToggleItalic в результате было установлено, что IsItalic имеет значение true, когда буква, которую я собираюсь набрать, выделена курсивом. У кого-нибудь есть идеи, как решить эту проблему?

Заранее большое спасибо,

Liewe

1 Ответ

1 голос
/ 10 марта 2010

Я нашел решение, я не должен создавать новый TextRange, а просто использовать TextSelection, короче как это:

object fontStyleObject = _richTextBox.Selection.GetPropertyValue(Run.FontStyleProperty);
...