首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rtf到文本块

rtf到文本块
EN

Stack Overflow用户
提问于 2012-04-21 04:46:04
回答 4查看 4.3K关注 0票数 1

当我尝试用rtf设置一个文本块时,它给出了一个有趣的输出,有没有一种方法可以在文本块中显示rtf,如果有,如何显示?

代码语言:javascript
复制
private void button1_Click(object sender, RoutedEventArgs e)
{
    TextRange tr = new TextRange(richTextBox1.Document.ContentStart,
                     richTextBox1.Document.ContentEnd);
    MemoryStream ms = new MemoryStream();
    tr.Save(ms, DataFormats.Rtf); 
    string rtfText = ASCIIEncoding.Default.GetString(ms.ToArray());
    textBlock1.Text = rtfText;

编辑更新:

我可以这样做:

代码语言:javascript
复制
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        TextRange tr = new TextRange(richTextBox1.Document.ContentStart,
             richTextBox1.Document.ContentEnd);
        MemoryStream ms = new MemoryStream();
        tr.Save(ms, DataFormats.Rtf); // does not contain a definition
        string rtfText = ASCIIEncoding.Default.GetString(ms.ToArray());
        MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(rtfText));
           this.richTextBox2.Selection.Load(stream, DataFormats.Rtf);

但是我真的很讨厌richtextbox,难道没有其他控件可以保存富文本格式吗?或者,有没有一种方法可以让某个控件显示rtf?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-21 05:49:57

您不能使用TextBlock来显示RTF文本。但是如果可以在FlowDocumentScrollViewer中显示文本,您可以这样复制它:

代码语言:javascript
复制
public MainWindow()
{
    InitializeComponent();

    richTextBox.Document = new FlowDocument();
    flowDocumentScrollViewer.Document = new FlowDocument();
}

private void CopyDocument(FlowDocument source, FlowDocument target)
{
    TextRange sourceRange = new TextRange(source.ContentStart, source.ContentEnd);
    MemoryStream stream = new MemoryStream();
    XamlWriter.Save(sourceRange, stream);
    sourceRange.Save(stream, DataFormats.XamlPackage);
    TextRange targetRange = new TextRange(target.ContentStart, target.ContentEnd);
    targetRange.Load(stream, DataFormats.XamlPackage);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    CopyDocument(richTextBox.Document, flowDocumentScrollViewer.Document);
}

了解Flow Documents here的概述。

票数 2
EN

Stack Overflow用户

发布于 2012-04-21 05:47:30

这将为您提供整个FlowDocument,但好消息是它确实包含了标记。我想这就是你要找的东西

代码语言:javascript
复制
string textMarkUp = System.Windows.Markup.XamlWriter.Save(richTextBox1.Document);
Debug.WriteLine(textMarkUp); 

样本输出

代码语言:javascript
复制
<Paragraph>asdfas<Run FontWeight="Bold">adsfasd;lkasdf</Run><Run FontStyle="Italic" FontWeight="Bold">alskjfd</Run></Paragraph>
票数 1
EN

Stack Overflow用户

发布于 2013-06-14 18:12:18

我需要文本块,因为它可以扩展到内容,并且我们可以将wrap设置为none。我将rtf字符串存储在数据库中。我将字符串添加到RichTextBlock中,然后使用它的文档获取内联。

代码语言:javascript
复制
    Dim stream As New IO.MemoryStream(System.Text.ASCIIEncoding.[Default].GetBytes("{\rtf1\ansi\ansicpg1252\deff0\deflang1040{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}{\colortbl ;\red255\green255\blue255;}\viewkind4\uc1\pard\cf1\f0\fs29 RIGO NOTIZIA 1 TESTO TESTO TESTO\fs17\par}"))
    Dim RichTextBox1 As New RichTextBox()
    RichTextBox1.Selection.Load(stream, DataFormats.Rtf)

    Dim pr As New System.Windows.Documents.Paragraph()
    pr = RichTextBox1.Document.Blocks(0)
    Dim tre As Int32 = pr.Inlines.Count
    TextBlock1.Inlines.Add(pr.Inlines(0))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10253321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档