Как изменить строку XAML в код XMAL для вставки в RichTextBox в WPF? - PullRequest
1 голос
/ 09 сентября 2010

я использую richtextbox в моем окне, и здесь я получаю ввод в виде строки, эта строка будет xmal строкой, и здесь мне нужно вставить строку в том же формате, что я ввел ... яполучен кодовый стек stackoverflow, но он работает только для одного, если XAMLstring имеет более одного абзаца, означает, что он не работает, здесь пример XMALstring для обоих работающих и не работающих.

Working For:

string xamlString = "<Paragraph xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"  TextAlignment=\"Left\"><Run FontFamily=\"Comic Sans MS\" FontSize=\"16\" Foreground=\"#FF0000FF\" FontWeight=\"Bold\" >This text is blue and bold.</Run></Paragraph>";

Не работает для:

string xamlString = "<FlowDocument xml:space=\"preserve\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><Paragraph><Run FontSize=\"14px\">Hai this is a Testing</Run></Paragraph><Paragraph><Run FontStyle=\"italic\" FontSize=\"12.5px\" FontWeight=\"bold\">Test</Run></Paragraph></FlowDocument>";

И вот мой код:

XmlReader xmlReader = XmlReader.Create(new StringReader(xamlString));
Paragraph template1 = (Paragraph)XamlReader.Load(xmlReader);
            newFL.Blocks.Add(template1);
RichTextBox1.Document = newFL;

1 Ответ

1 голос
/ 09 сентября 2010

Поскольку этот xamlString содержит FlowDocument, XamlReader.Load будет возвращать объект FlowDocument, а не Paragraph. Если вы хотите обрабатывать различные виды контента, вы можете сделать что-то вроде этого:

XmlReader xmlReader = XmlReader.Create(new StringReader(xamlString));
object template1 = XamlReader.Load(xmlReader);

FlowDocument newFL;
if (template1 is FlowDocument)
{
    newFL = (FlowDocument)template1;
}
else
{
    newFL = new FlowDocument();
    if (template1 is Block)
    {
        newFL.Blocks.Add((Block)template1);
    }
    else if (template1 is Inline)
    {
        newFL.Blocks.Add(new Paragraph((Inline)template1));
    }
    else if (template1 is UIElement)
    {
        newFL.Blocks.Add(new BlockUIContainer((UIElement)template1));
    }
    else
    {
        // Handle unexpected object here
    }
}

RichTextBox1.Document = newFL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...