WPF,RichTextBox在光标位置获取正确的textproperties时出现问题

时间:2010-03-10 10:29:22

标签: wpf richtextbox

我正在使用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 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,我不会创建一个新的TextRange,只是使用TextSelection,简而言之就是这样:

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