如何让XamlReader.Load(xamlFile)不要插入额外的Run元素?

想象一下,我有一个像这样的FlowDocument:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              ColumnWidth="400" FontSize="14" FontFamily="Georgia"
              Name="document">
    <Paragraph KeepTogether="True">
        <Run>ABC</Run>
        <Run>DEF</Run>
        <Run>GHI</Run>
    </Paragraph>
</FlowDocument>
我加载它是这样的:
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        FileStream xamlFile = new FileStream("FlowDocument1.xaml", FileMode.Open);
        FlowDocument content = XamlReader.Load(xamlFile) as FlowDocument;
        fdReader.Document = content;
    }
结果如下: 虽然我想看到的是这样的: 但是在检查观察窗口中的FlowDocument时,我看到它在它们之间插入了一个基本上有空格作为内容的运行,所以不是在段落中有3个Inlines,而是有5个。 如何避免插入空白行? 注意:我无法将这三个运行组合成一个单独的运行,这将是一个简单的答案,因为它们需要保持单独的对象。 想法? 解决方案:正如Aaron在下面正确回答的那样,将运行分组在一行上解决了这个问题。顺便说一句,这个文档是在其他数据(比我的例子更复杂)的基础上构建的,并使用XmlWriter写出来,它将XmlWriterSettings属性设置为true(因为它更容易看到输出而不是全部一起运行) - 将其设置为false可以在XamlReader读入时删除那些额外的运行。     
已邀请:
您可以简单地将所有运行放在一条线上......
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              ColumnWidth="400" FontSize="14" FontFamily="Georgia"
              Name="document">
    <Paragraph KeepTogether="True">
        <Run>ABC</Run><Run>DEF</Run><Run>GHI</Run>
    </Paragraph>
</FlowDocument>
然后,您可以通过
InlineCollection
访问每次运行...
foreach (var run in ((Paragraph)content.Blocks.FirstBlock).Inlines)
{
   //do stuff with run             
}
    
赞成这个问题;谁会猜到XAML:
<TextBlock.Inlines><Run Text="[" /><Run Text="0" /><Run Text="-" /><Run Text="2" /><Run Text="]" /></TextBlock.Inlines>
会得到不同的结果:
<TextBlock.Inlines>
    <Run Text="[" />
    <Run Text="0" />
    <Run Text="-" />
    <Run Text="2" />
    <Run Text="]" />
</TextBlock.Inlines>
第一个给出“[0-2]”而第二个给出“[0-2]”。特别要注意的是,在第二种情况下,第一个和最后一个
Run
也得到特殊处理,因为在那些之前(或之后)没有插入空格。 显然,即使明确提供(至少一个)
Inline
Inline
为其ѭ7儿童抓取原始XAML的便利特征也不会失败。     

要回复问题请先登录注册