0

我正在将一些 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 编写?

奖金

如果您正确回答问题,我会告诉您笑话的妙语:)

4

2 回答 2

2

我认为使用跨度不会对您有所帮助(因为它会将非格式化文本排除在 XML 元素之外,因此它可能不会自动格式化)。

IE

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

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

于 2010-01-29T05:48:01.573 回答
1

unicode 退格字符是否有可能解决您的问题?

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

更新

另一个想法。你研究过XDocument.Save(TextWriter textWriter, SaveOptions saveOptions)方法吗?该文档说,如果您使用SaveOptions.DisableFormatting,它将保留间距。

于 2010-01-29T05:41:07.497 回答