Can't use apostrophe in StringFormat of a XAML

2019-04-19 15:21发布

问题:

I'm trying use StringFormat to insert apostrophies (apostrophe's?) around a value that is bound to a TextBlock:

<TextBlock Text="{Binding MyValue, StringFormat='The value is &apos;{0}&apos;'}"/>

However, I get a compile error:

Names and Values in a MarkupExtension cannot contain quotes. The MarkupExtension arguments ' MyValue, StringFormat='The value is '{0}''}' are not valid.

I do notice that it does work for quotes though:

<TextBlock Text="{Binding MyValue, StringFormat='The value is &quot;{0}&quot;'}"/>

Is this a bug with StringFormat?

回答1:

I'm not sure if it's a bug, but I tested this method, and it works:

<TextBlock Text="{Binding MyValue, StringFormat='The value is \'{0}\''}" />

Seems like single quotes within StringFormat have to be escaped using \ as opposed to the traditional XML style &apos;



回答2:

Try to use \ before &apos:

<TextBlock Text="{Binding MyValue, StringFormat='The value is \&apos;{0}\&apos;'}"/>


回答3:

This only solution worked for me : remove FallbackValue quotes (!) and then escape the special character.

<TextBlock Text="{Binding StateCaption, FallbackValue=It couldn\'t be more weird}" />

Even the VS2017 XAML Intellisense is lost ! it displays "It" in blue, "couldn" in red, and "be more weird" in blue... but it works.

I even tested this more complexe case, and attributes following a text with spaces and without quotes are correctly interpreted :

<TextBlock Text="{Binding StateCaption, StringFormat=It couldn\'t be more weird,FallbackValue=test}" />

(Tested on VS2017, Framework 4.0)