WPF绑定中单引号的目的是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF绑定中单引号的目的是什么?相关的知识,希望对你有一定的参考价值。
与this question类似,我很好奇如何解释WPF中的表达式{Binding ''}
。
请注意,绑定后有两个撇号。
除了Google搜索之外,我还查看了上面链接问题中提供的this link,但是在Binding之后无法断言两个撇号的含义。
我遇到的是字符串格式表达式,其中撇号在双引号内用于表示另一个字符串表达式。但我怀疑这个问题就是这个问题。
这个表达是什么意思?
它相当于一个空路径。撇号简单地包含你在它们之间写的任何东西。所以在你的情况下它是一个绑定到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'}"/>
那么,'
s用于什么?例如,对于前导空格和尾随空格。
<!-- no whitespaces -->
<TextBlock Text="{local:String text }"/>
<!-- whitespaces -->
<TextBlock Text="{local:String ' text '}"/>
以上是关于WPF绑定中单引号的目的是什么?的主要内容,如果未能解决你的问题,请参考以下文章