正确编写XML作为XML文字编写

时间:2010-01-29 05:29:39

标签: xaml linq-to-xml whitespace xml-literals

我正在将一些XML从DrawingML转换为XAML。不幸的是,XAML没有像预期的那样使用空格,但我找到了一个解决方法。这是问题所在:

问题规则

我想在TextBlock中编写以下内容:

  

约翰寿司A说的是什么   寿司B?

所以我会写:

<TextBlock>
 <Run>Hey</Run>
 <Run FontWeight="Bold">John</Run>
 <Run>,</Run>
 <Run FontStyle="Italic">what did Sushi A say to Sushi B?</Run>
</TextBlock>

这不会产生预期的结果。相反,它产生:

  

约翰寿司A说的是什么   寿司B?

请注意“John”和“,”之间的空格?很奇怪,是吗?这是因为XAML在运行之间追加一个空格。我不知道为什么会这样。我确实需要完全如上所述的格式,因此更改格式的选项,如使逗号加粗也不是一种选择。

部分解决方案

更奇怪的是,有一种解决方法 - 即失去XAML增加的额外空间 - 你必须把你的跑步放在同一条线上。我不知道为什么,但事实就是这样。所以以下实际上工作得很好:

<TextBlock>
 <Run>Hey</Run>
 <Run FontWeight="Bold">John</Run><Run>,</Run>
 <Run FontStyle="Italic">what did Sushi A say to Sushi B?</Run>
</TextBlock>

注意运行#2和#3(4次运行)现在在同一行。

问题

我遇到的问题是我没有找到使用XML Literals编写上述内容的方法。如果我试试这个:

Dim tb = <TextBlock>
             <Run>Hey</Run>
             <Run FontWeight="Bold">John</Run><Run>,</Run>
             <Run FontStyle="Italic">what did Sushi A say to Sushi B?</Run>
         </TextBlock>

始终创建如下所示,其中4个分行在单独的行上:

<TextBlock>
 <Run>Hey</Run>
 <Run FontWeight="Bold">John</Run>
 <Run>,</Run>
 <Run FontStyle="Italic">what did Sushi A say to Sushi B?</Run>
</TextBlock>

是否有人知道XML的编写方式与XML Literals中编写的完全相同?

加成

如果你正确地回答了这个问题,我会告诉你这个笑话的妙语:)

2 个答案:

答案 0 :(得分:2)

我不认为使用span会帮助你(因为它会保留XML格式的非格式化文本,因此它可能不会自动格式化)。

即。

<TextBlock>
    <Span>                
        Hey
        <Bold>John</Bold>, 
        <Italic>what did Sushi A say to Sushi B?</Italic>
    </Span>            
</TextBlock>

显然这只能修复特定情况而不是一般情况,我可能会建议不要使用XML文字:)

答案 1 :(得分:1)

unicode退格符可以解决你的问题吗?

http://www.fileformat.info/info/unicode/char/0008/index.htm

<强>更新

另一个想法。您是否研究过XDocument.Save(TextWriter textWriter, SaveOptions saveOptions)方法? The documentation表示如果您使用SaveOptions.DisableFormatting,则会保留间距。