2012-08-10 38 views
2

我正在使用RichTextBox來顯示一些只能在運​​行中標記的只讀文本。 如何在文本中傳遞標記代碼以使其由RichTextBox控件呈現?RichTextBox - 如何通過標記代碼

例如,我想將this is \cf6 sample \cf1 text傳遞給richtextbox進行渲染。

現在,我構建了一個FlowDocument並將文本值添加到運行對象,但文本逐字呈現。

RichTextBox fieldLabel = new RichTextBox(); 

FlowDocument flowDoc = new FlowDocument(); 
Paragraph myPara = new Paragraph(); 
Run myRun = new Run(content); 

myPara.Inlines.Add(myRun); 
flowDoc.Blocks.Add(myPara); 
fieldLabel.Document = flowDoc; 

我想看到紅色的值,但我看到的是標記。

在此先感謝您的任何意見。

回答

1

你不能像這樣分配RTF文本。您需要將該文本放入流中,然後將該流傳遞給RichTextBox.Selection.Load()方法。例如

MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(yourRTFText)); 
fieldLabel.Selection.Load(stream, DataFormats.Rtf); 
+0

你能肯定嗎?您可能需要檢查文檔。 http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.aspx – Paparazzi 2012-08-10 22:56:49

+0

是的。看到這個http://msdn.microsoft.com/en-us/library/system.windows.documents.textrange.load.aspx – IUnknown 2012-08-10 23:54:06

+0

這是一個使用上面粘貼的代碼工作的示例。 '私人無效Window_Loaded(對象發件人,RoutedEventArgs E) { 串yourRTFText = @「{\ RTF1 \ ANSI {\ fonttbl \ F0 \ fswiss黑體;} \ F0 \ PARD 這是一些{\ b黑體}文本\ par }「; MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(yourRTFText)); richTextBox1.Selection.Load(stream,DataFormats.Rtf); }' – IUnknown 2012-08-11 00:01:15

0

你必須適用於段落

// Create a FlowDocument to contain content for the RichTextBox. 
FlowDocument myFlowDoc = new FlowDocument(); 

// Add paragraphs to the FlowDocument. 
myFlowDoc.Background = Brushes.LightBlue; 
myFlowDoc.Foreground = Brushes.DarkRed; 
myFlowDoc.Typography.Capitals = FontCapitals.SmallCaps; 
myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1"))); 
Paragraph p = new Paragraph(new Run("Paragraph 2")); 
p.Foreground = Brushes.Black; 
myFlowDoc.Blocks.Add(p); 
myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3"))); 
RichTextBox myRichTextBox = new RichTextBox(); 

// Add initial content to the RichTextBox. 
myRichTextBox.Document = myFlowDoc; 
+0

tx,問題在於,流程文檔的創建與數據規則是分開的。實質上,一個區域構建文本,並且引擎正在將內容「知道」其rtf格式並將其放入文檔中,以使rtf框可以閱讀它。所以這對我來說並不是真的,或者我會這樣做。雖然,我想這可能是一個選項,我創建了一個我發送到引擎的flowdocument xml,並讓引擎將該文檔作爲內容讀取。但有沒有像直接標記提及的方式?我記得在VB6中使用rtf控制,允許輸入純文本或rtf文本。 – user1161137 2012-08-10 23:25:44

+0

好吧,我明白了。你的例子意味着你可以操縱FlowDoc。我記得不知何故,我必須將輸入聲明爲XML。你有沒有試過iUnknown的答案? – Paparazzi 2012-08-11 00:39:39