2013-11-26 34 views
0

我正在嘗試更改富文本框中第一個索引處顯示的字母的顏色。但我的代碼不起作用。我使用getpositionatoffset形式0指數爲1,這是我的代碼:如何更改在富文本框中第一個索引處顯示的字母的顏色?

C#

TextSelection ts = box1.Selection; 
TextPointer tp = box1.Document.ContentStart.GetPositionAtOffset(0); 
TextPointer tpe = box1.Document.ContentStart.GetPositionAtOffset(1); 
ts.Select(tp, tpe); 
ts.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(Colors.Red)); 

如果我改變GetPositionAtOffset的值(1)GetPositionAtOffset(3)將開始工作。我不知道這是爲什麼發生。

XAML:

<RichTextBox Name="box1" Grid.ColumnSpan="2"> 
     <FlowDocument Name="flowdoc"> 
      <Paragraph Name="para" >I am a flow document. Would you like to edit me?</Paragraph> 
     </FlowDocument> 
</RichTextBox> 
+2

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

6

您的文檔包含要比文本。有FlowDocument和段落。因此GetPositionAtOffset(0)返回flowdocument開頭而不是第一個字母。 要獲得第一個字符,您必須前進,直到找到文本元素:

TextPointer position = box1.Document.ContentStart; 
while (position != null) 
{ 
    if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text) 
    { 
     TextPointer start = position.GetPositionAtOffset(0, LogicalDirection.Forward); 
     TextPointer end = position.GetPositionAtOffset(1, LogicalDirection.Backward); 
     new TextRange(start, end).ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red); 
     break; 
    } 
    position = position.GetNextContextPosition(LogicalDirection.Forward); 
} 
相關問題