WPF FlowDocument到InlineCollection

Joc*_*ner 0 wpf textblock richtextbox flowdocument

我想在WPF应用程序中为TextBox文本创建一个小的“位置编辑器”。为此,我想使用RichTextBox。由于RichTextBox与FlowDocument一起使用,而TextBlock与InlineCollection一起使用,所以这不起作用。有没有一种简单的方法可以将RichtextBox文档转换为InlineCollection?(如果我仅允许RTB内容支持内联?)

Cle*_*ens 5

类似以下扩展方法的内容可以用于从FlowDocument中提取所有内联。您可能需要添加一些额外的空白行以分隔段落和部分。

public static class FlowDocumentEx
{
    public static ICollection<Inline> GetInlines(this FlowDocument doc)
    {
        return GetInlines(doc.Blocks);
    }

    public static ICollection<Inline> GetInlines(TextElementCollection<Block> blocks)
    {
        var inlines = new List<Inline>();

        foreach (var block in blocks)
        {
            if (block is Paragraph)
            {
                inlines.AddRange(((Paragraph)block).Inlines);
            }
            else if (block is Section)
            {
                inlines.AddRange(GetInlines(((Section)block).Blocks));
            }
        }

        return inlines;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以这样使用它:

textBlock.Inlines.Clear();
textBlock.Inlines.AddRange(richTextBox.Document.GetInlines());
Run Code Online (Sandbox Code Playgroud)