MarkupExtension无法使用Label?

时间:2017-02-24 09:23:09

标签: xaml string-formatting markup-extensions

我不明白为什么我的MarkupExtension StringFormat不适用于标签,但与TextBlocks完美配合。

以下是我的代码的简化版本:

[MarkupExtensionReturnType(typeof (BindingExpression))]
public class Format : MarkupExtension
{
    #region Public Properties

    public BindingBase Binding { get; set; }

    public IValueConverter Converter { get; set; }

    public string StringFormat { get; set; }

    #endregion

    #region Public Methods and Operators

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        this.Binding.StringFormat = this.StringFormat;
        return this.Binding.ProvideValue(serviceProvider);
    }

    #endregion
}

和XAML:

<TextBlock Text="{wpfApplication31:Format Binding={Binding Name}, StringFormat=X_{0}}" /> <!-- StringFormat WORKING -->
<Label Content="{wpfApplication31:Format Binding={Binding Name}, StringFormat=X_{0}}" /> <!-- StringFormat NOT WORKING -->

该物业名称&#39;是一个简单的字符串。

我认为这与Label是一个比TextBlock更复杂的对象有关,但我仍然不明白为什么不应用StringFormat。

如果有人可以提供帮助。 THX

1 个答案:

答案 0 :(得分:0)

来自this answer

之所以不起作用,是因为Label.Content属性的类型为ObjectBinding.StringFormat仅在绑定到类型为String的属性时使用。

要使其工作,您需要调整MarkupExtension的行为,使其在用于Label.ContentStringFormat属性时设置Label.Content。您可以将收到的IServiceProvider用作ProvideValue方法的第一个参数。