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リテラルを使用して上記を記述する方法が見つからないことです。私がこれを試してみると:

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リテラルで記述されたとおりに正確に記述する方法を知っている人はいますか?

ボーナス

あなたが質問に正しく答えれば、私はあなたに冗談のオチを教えます:)

4

2 に答える 2

2

スパンを使用すると役立つとは思いません(フォーマットされていないテキストがXML要素から除外されるため、自動フォーマットされない可能性があります)。

すなわち

<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

アップデート

もう1つのアイデア。XDocument.Save(TextWriter textWriter, SaveOptions saveOptions)その方法を調べましたか?ドキュメントには、を使用するSaveOptions.DisableFormattingと間隔が保持されると記載されています。

于 2010-01-29T05:41:07.497 に答える