我正在使用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
答案 0 :(得分:1)
我找到了一个解决方案,我不会创建一个新的TextRange,只是使用TextSelection,简而言之就是这样:
object fontStyleObject = _richTextBox.Selection.GetPropertyValue(Run.FontStyleProperty);