Я создаю простой редактор с использованием 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