问题
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 '{0}''}"/>
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 "{0}"'}"/>
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 '
回答2:
Try to use \
before &apos
:
<TextBlock Text="{Binding MyValue, StringFormat='The value is \'{0}\''}"/>
回答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)
回答4:
Just encountered this problem for UWP creating a StringFormatConverter ConverterParameter for a TimeSpan value. The TimeSpan.ToString(x) custom format string for some crazy reason requires apostrophes around literal characters even though DateTimeOffset doesn't. Seems needlessly inconsistent.
Anyway... None of the above successfully worked. One approach worked as far as getting the XAML designer to display/work, but it created a build error.
The solution I settled upon was to put the format string in a string resource of the nearest enclosing element. Since I was displaying the value in a box created using Border, I stuffed the format string into the resources of the Border element.
The StringFormatConverter is the one from the Microsoft UWP Toolkit on NuGet.
<StackPanel Orientation="Horizontal">
<TextBlock Text="Timespan=" />
<Border BorderBrush="Black" BorderThickness="0.5" Padding="2">
<Border.Resources>
<x:String x:Key="TimespanValueConverterParameter">{0:hh':'mm':'ss'.'fff}</x:String>
</Border.Resources>
<TextBlock Text="{Binding TimespanValue, Mode=OneWay, Converter={StaticResource StringFormatConverter}, ConverterParameter={StaticResource TimespanValueConverterParameter}}" />
</Border>
</StackPanel>
来源:https://stackoverflow.com/questions/7950338/cant-use-apostrophe-in-stringformat-of-a-xaml-binding