与this question类似,我很好奇如何解释WPF中的表达式{Binding ''}
。
请注意 Binding 后有两个撇号。
除了谷歌搜索,我查看了上面链接问题中提供的this link,但是在 Binding 之后无法断言两个撇号的含义。
我遇到的是String Format表达式,其中撇号在双引号内用于表示另一个String表达式。但我怀疑这个问题就是这个问题。
这个表达是什么意思?
答案 0 :(得分:3)
它等同于空路径。撇号简单地包含你在它们之间写的任何东西。所以在你的情况下,它是一个绑定到DataSource(没有路径) - 虽然我不得不说,我从来没有见过它以这种方式使用。
您可能在任何与Bindings相关的上下文中找不到的原因是因为它实际上是一个可用于所有XAML标记扩展的功能(例如Binding
,Static
,StaticResource
等)。
MSDN: Details about how markup extensions are parsed
MEMBERNAME或STRING的文本值如下所示。消耗前导空白字符而不在生成的令牌中表示。 如果第一个非空白字符是引号(Unicode代码点0022,引号或0027,Apostrophe),则tokenizer按如下方式继续:
第一个引用已消耗,并且未在令牌的值中表示。
文本值成为最多但不包括下一个匹配引号的字符(即与开头引号相同的代码点的字符),前面没有“\”字符。所有这些字符以及结束语都被消耗掉了。将删除生成的文本值中的任何“\”字符。
结束引号后面的空格字符被使用,并且不会在令牌中表示。
以这个简单(而且无用)的扩展名为例:
public class StringExtension : MarkupExtension
{
public StringExtension()
{ }
public StringExtension(string value)
{
Value = value;
}
public string Value { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Value;
}
}
可以像这样使用扩展(所有相同的结果):
<!-- via constructor (1 argument) -->
<TextBlock Text="{local:String text}"/>
<!-- via constructor (1 argument) -->
<TextBlock Text="{local:String 'text'}"/>
<!-- via empty constructor + named property -->
<TextBlock Text="{local:String Value=text}"/>
<!-- via empty constructor + named property -->
<TextBlock Text="{local:String Value='text'}"/>
那么,'
用于什么?例如用于前导和尾随空格。
<!-- no whitespaces -->
<TextBlock Text="{local:String text }"/>
<!-- whitespaces -->
<TextBlock Text="{local:String ' text '}"/>