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

问题描述 投票:2回答:1

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

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

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

这个表达是什么意思?

wpf xaml data-binding
1个回答
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'}"/>

那么,'s用于什么?例如,对于前导空格和尾随空格。

<!-- no whitespaces -->
<TextBlock Text="{local:String      text    }"/>

<!-- whitespaces -->
<TextBlock Text="{local:String '    text    '}"/>
© www.soinside.com 2019 - 2024. All rights reserved.