【问题标题】:What's the purpose of single quotes in WPF Bindings?WPF 绑定中单引号的目的是什么?
【发布时间】:2018-08-08 04:15:46
【问题描述】:

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

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

我遇到的是字符串格式表达式,其中在双引号内使用撇号表示另一个字符串表达式。但对于这个问题,我怀疑这里是否属于这种情况。

这个表达是什么意思?

【问题讨论】:

  • 相当于一个空的Path。撇号只是将您在它们之间写的任何内容括起来。因此,在您的情况下,它是对 DataSource 的绑定(没有路径)-尽管我不得不说,我从未见过它以这种方式使用。

标签: wpf xaml data-binding


【解决方案1】:

相当于一个空路径。撇号只是将您在它们之间写的任何内容括起来。因此,在您的情况下,它是对 DataSource 的绑定(没有路径)-尽管我不得不说,我从未见过它以这种方式使用。

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

MSDN: Details about how markup extensions are parsed

MEMBERNAME 或 STRING 的文本值读取如下。使用前导空白字符而不在生成的令牌中表示。 如果第一个非空白字符是引号(Unicode 代码点 0022,引号或 0027,撇号),分词器将按如下方式进行:

第一个引号被消费了,并且没有在令牌的值中表示。

文本值成为直到但不包括下一个匹配的引号(即与开头引号相同的代码点的字符)之前没有“\”字符的字符。所有这些字符以及结束引号都被消耗掉了。结果文本值中的所有“\”字符都将被删除。

结束引号后的空格字符被消耗,并且不在令牌中表示。

以这个简单(而且相当无用)的扩展为例:

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

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多