我正在將格式應用於WPF RichTextBox中選定的標記。要做到這一點,我得到一個TextRange,它包含了我想強調的標記。然後,我將改變文本的顏色是這樣的:WPF RichTextBox - 輸入文本的格式
// Get start and end pointer for token
TextPointer startPointer = run.ContentStart.GetPositionAtOffset(startOffset);
TextPointer endPointer = run.ContentStart.GetPositionAtOffset(endOffset);
// Get text range for token
TextRange textRange = new TextRange(startPointer, endPointer);
// Highlight token
textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue);
這是對我的RichTextBox的TextChanged事件發生。
格式化按預期方式應用,但繼續輸入文本將導致新文本繼承已應用於相鄰單詞的格式。我希望將任何新文本的格式設置爲使用RichTextBox屬性中定義的默認格式選項。這可能嗎?
另外,我可以突出顯示所有令牌,我不想用默認的格式化選項爲藍色,但這對我來說感覺很尷尬。
感謝您的回覆Benny。 是的,這是標準的行爲,但我試圖實現語法突出顯示,寧願它沒有這樣做。在TextChanged事件中,我簡單地調用了我的解析例程,該例程產生具有用於創建TextRange的開始和結束位置的令牌(我已將此代碼添加到我的原始問題中)。 使用空格作爲分隔符是可能的,但我寧願避免它,因爲空格不能保證。 謝謝, Alan – 2010-04-05 11:52:09
嗯,它不必是空格作爲分隔符。我所建議的是**等待**直到光標位於'endOffset + 1'處,以便在光標和文本範圍之間存在某種東西。所以即使在輸入'SomeToken |'* *之後,輸入「n」後,標記還沒有被選中。但是,當我輸入* next *字符,'SomeToken {|',那麼當我輸入「{」(或任何其他字符)時,就會找到並設置標記。我注意到,語法突出顯示在其他一些程序中就像那樣。對不起,如果我不清楚。我希望更清楚。 – 2010-04-05 12:21:49
再次感謝本尼。別擔心,你很清楚。 我試圖避免的是每個解析器上格式化的完全重置,但我仍然可以看到RichTextBox在繼承相鄰格式時的行爲,如果我沒有完全重置格式,會導致我出現問題。我相信會有一個快樂的媒介。 謝謝, Alan – 2010-04-05 13:01:47