如何在XAML标记扩展属性文字中转义单引号?

Dre*_*kes 12 .net xaml escaping markup-extensions

我有一个格式化数字的值转换器(不幸的是我不能使用SP1).它工作正常,直到它获得百分比.

这是一个例子:

<TextBlock Text="{Binding Path=PercentageComplete,
                          Converter={StaticResource NumberFormatter},
                          ConverterParameter='0.00 %'}" />
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我Double.ToString看到一个百分比字符时,它会将该数字乘以100.在我的情况下,该数字已经是一个百分比,不需要转换.

在C#中,这可以通过%使用单引号转义字符来实现:

(99.99).ToString("0.00 %")  // gives -> "9999 %"
(99.99).ToString("0.00 '%") // gives -> "99.99 %"
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能ConverterParameter在上面的XAML标记扩展中使用单引号.有没有办法逃避它?我试过加倍单引号并使用反斜杠,但都无法编译.

Row*_*haw 11

未经测试,但您尝试过:

<TextBlock Text="{Binding Path=PercentageComplete,
                      Converter={StaticResource NumberFormatter},
                      ConverterParameter=&quot;0.00 '%&quot;}" />
Run Code Online (Sandbox Code Playgroud)


Pie*_*kel 9

以下内容摘自http://msdn.microsoft.com/en-us/library/ee200269.aspx.

您可以使用反斜杠转义任何字符.它不解析反斜杠,只是跳过它们.所以:

  • 'foo\'bar'变得foo'bar;
  • "foo\"bar"变得foo"bar;
  • 'foo\\bar'变得foo\bar;
  • 'foo\nbar'成为foonbar而不是换行符.

但是,标记扩展解析非常奇怪.尽管Visual Studio语法突出显示不支持它,但除了\{},=有效值字符之外的任何字符都是如此.这意味着以下结构是合法的:

  • {MyExtension Name=foo'bar} (引号必须是第一个被认为是字符串引用的字符;其他任何地方只需逐字复制);
  • {MyExtension Name=f oo}(空间也是合法的;这就变成了f oo);
  • {MyExtension Name= foo }(修改了值周围的空格;这就变成了foo);
  • {MyExtension Name=foo\\bar}(\逐字复制后的字符,这样就变成了foo\bar);
  • {MyExtension Name=foo \\ bar}(这变成了foo \ bar);
  • {MyExtension Name=foo \} bar}(而这就变成了foo } bar).

请注意,\规则也适用于此:跟随a的任何字符\都是逐字复制的.

  • 你测试过了吗?我在这里有一个例子,我想插入'\ t'作为ConverterParameter.'\ t'给了't','\ t'给了我'\ t'. (2认同)