2013-06-18 112 views
2

我已經搜索了一段時間的這個解決方案,所以現在我在這裏發佈。WPF RichTextBox更改字體顏色內嵌

現在我能夠改變整個RichTextBox的前景色:

yourRichTextBox.Foreground = Brushes.Red; 

我也能夠改變一些文字,用戶已經與他們的光標選擇的顏色:

if(!yourRichTextBox.Selection.IsEmpty){ 
    yourRichTextBox.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red); 
} 

但我想能夠改變用戶鍵入的下一個文本的顏色。

我有一個返回用戶想要的文本要在顏色拾色器對話框。因此,用戶在RichTextBox在正常的黑色字體輸入,那麼他們會點擊顏色選擇器按鈕,選擇一種顏色,打好,然後他們鍵入的下一個東西就是這種顏色。有沒有辦法做到這一點或我運氣不好?

我能想到的唯一方法就是擁有一個緩衝區來捕獲用戶輸入的每個字符,然後在輸入的每個字母上設置前景屬性,然後將其添加回RichTextBox,想法?

+0

在這裏找到的解決方案將工作我認爲(沒有測試它): http://stackoverflow.com/questions/1926264/color-different-parts-of-a-richtextbox-string?answertab=active#tab -top AppendText函數被重載並且可以使用額外的顏色屬性調用 –

回答

1

您用於選擇的代碼適用於我。例如:

<RichTextBox x:Name="yourRichTextBox" TextChanged="yourRichTextBox_TextChanged_1"> 
     <FlowDocument> 
      <Paragraph> 
       <Run Text="fdsfdfsda"/> 
      </Paragraph> 
      <Paragraph> 
       <Run/> 
      </Paragraph> 
     </FlowDocument> 
    </RichTextBox> 

代碼背後:

private void yourRichTextBox_TextChanged_1(object sender, TextChangedEventArgs e) 
    { 
     yourRichTextBox.Selection.ApplyPropertyValue(RichTextBox.ForegroundProperty, Brushes.Red); 
    } 

一旦你開始打字,第二個字母及以後(第一觸發這種改變)將是紅色。

+0

我必須弄清楚第二個字母的事情,但這絕對是我在尋找的東西,我甚至沒有想過如何捕獲「 TextChanged'事件。謝謝! – ToastyMallows

+0

PreviewKeyDown而不是TextChanged。 –