2010-03-10 65 views
2

我正在使用wpf richtextbox构建一个简单的编辑器。这个编辑器有一些用于粗体,斜体,下划线等的切换按钮,当所选文本或光标处的文本具有适当属性时,这些按钮被“按下”。我这样做是这样的:WPF,RichTextBox在获取光标位置的正确textproperties问题

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

我找到了一个解决方案,我shoudn't做出的新TextRange只是使用TextSelection,总之这样的:

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