我不明白为什么我的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
答案 0 :(得分:0)
来自this answer:
之所以不起作用,是因为
Label.Content
属性的类型为Object
,Binding.StringFormat
仅在绑定到类型为String
的属性时使用。
要使其工作,您需要调整MarkupExtension
的行为,使其在用于Label.ContentStringFormat
属性时设置Label.Content
。您可以将收到的IServiceProvider
用作ProvideValue
方法的第一个参数。