FlowDocument не показывает мой код XAML из кода позади, а отображает его как HTML-теги
Я пытаюсь показать эту часть XAML в Flowdocument
<Section xml:space='preserve' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Paragraph><Hyperlink NavigateUri='E6A88D2B.js'/></Paragraph><Paragraph /><Paragraph><Span Foreground='blue'><Run FontWeight='bold'>NOW, the</Run></Span><Span>/ˌen əʊ ˈdʌb<Run FontStyle='italic'>ə</Run>ljuː $ -oʊ-/ </Span><Run>BrE</Run><Run /><Run /><Run>AmE</Run><Run /><Run /><LineBreak /><Span><Span FontWeight='bold'><Run Foreground='blue'>(the National Organization for Women)</Run></Span> a large US organization started in 1966, which works for legal, economic, and social equality between women and men. Its first president was Betty ↑<Run>Friedan</Run>, who also helped to start it</Span><LineBreak /></Paragraph></Section>
Когда я вставляю свой XAML-код в тег flowdocument, он отлично показывает содержимое и форматирует его:
<FlowDocumentScrollViewer Width="400" VerticalAlignment="Bottom" Height="200" >
<FlowDocument>
<Section xml:space='preserve' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Paragraph><Hyperlink NavigateUri='E6A88D2B.js'/></Paragraph><Paragraph /><Paragraph><Span Foreground='blue'><Run FontWeight='bold'>NOW, the</Run></Span><Span>/ˌen əʊ ˈdʌb<Run FontStyle='italic'>ə</Run>ljuː $ -oʊ-/ </Span><Run>BrE</Run><Run /><Run /><Run>AmE</Run><Run /><Run /><LineBreak /><Span><Span FontWeight='bold'><Run Foreground='blue'>(the National Organization for Women)</Run></Span> a large US organization started in 1966, which works for legal, economic, and social equality between women and men. Its first president was Betty ↑<Run>Friedan</Run>, who also helped to start it</Span><LineBreak /></Paragraph></Section>
</FlowDocument>
</FlowDocumentScrollViewer>
Но я хочу сделать это программно из кода, и это не работает. И он показывает неформатированный текст XAML, который точно такой же, как вставленный код XAML
Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add(new Run(myXamlCode));
Section section = new Section();
section.Blocks.Add(paragraph);
myFlowDocument.Blocks.Add(section);
Какой лучший способ показать мой код XAML?
1 ответ
Вам может понадобиться проанализировать xaml для соответствующего объекта вместо того, чтобы вставлять то же самое, что и строковое значение в Run.
XamlReader.Parse поможет вам разобрать такую строку и инициализировать / создать объект для нее.
Section section = XamlReader.Parse(myXamlCode) as Section;
myFlowDocument.Blocks.Add(section);
Приведенный выше пример предполагает строку myXamlCode
со следующим текстом (как упоминалось в вопросе)
<Section xml:space='preserve' xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Paragraph><Hyperlink NavigateUri='E6A88D2B.js'/></Paragraph><Paragraph /><Paragraph><Span Foreground='blue'><Run FontWeight='bold'>NOW, the</Run></Span><Span>/ˌen əʊ ˈdʌb<Run FontStyle='italic'>ə</Run>ljuː $ -oʊ-/ </Span><Run>BrE</Run><Run /><Run /><Run>AmE</Run><Run /><Run /><LineBreak /><Span><Span FontWeight='bold'><Run Foreground='blue'>(the National Organization for Women)</Run></Span> a large US organization started in 1966, which works for legal, economic, and social equality between women and men. Its first president was Betty ↑<Run>Friedan</Run>, who also helped to start it</Span><LineBreak /></Paragraph></Section>
в качестве примечания, рассматриваемый код переводится в следующее
<FlowDocument>
<Section>
<Paragraph>
<Run Text="<Section>...</Section>" />
</Paragraph>
</Section>
</FlowDocument>
это может сделать как HTML-вещь, которую вы видите
например
<Раздел>... Section>
вместо того, который вы ожидаете.