WPF绑定中单引号的目的是什么?

时间:2018-02-28 10:11:48

标签: wpf xaml data-binding

this question类似,我很好奇如何解释WPF中的表达式{Binding ''}
请注意 Binding 后有两个撇号。

除了谷歌搜索,我查看了上面链接问题中提供的this link,但是在 Binding 之后无法断言两个撇号的含义。

我遇到的是String Format表达式,其中撇号在双引号内用于表示另一个String表达式。但我怀疑这个问题就是这个问题。

这个表达是什么意思?

1 个答案:

答案 0 :(得分:3)

它等同于空路径。撇号简单地包含你在它们之间写的任何东西。所以在你的情况下,它是一个绑定到DataSource(没有路径) - 虽然我不得不说,我从来没有见过它以这种方式使用。

您可能在任何与Bindings相关的上下文中找不到的原因是因为它实际上是一个可用于所有XAML标记扩展的功能(例如BindingStaticStaticResource等)。

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    '}"/>