2012-08-10 58 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