2010-03-10 63 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);