这不起作用的原因是该Label.Content
属性是类型的Object
,Binding.StringFormat
仅在绑定到一个类型的属性时使用String
。
发生了什么事:
- 将
Binding
您的MaxLevelOfInvestment
值Label.Content
装箱并将属性存储为装箱的十进制值。
- Label控件具有一个包含的模板
ContentPresenter
。
- 由于
ContentTemplate
未设置,因此为该类型ContentPresenter
查找DataTemplate
定义Decimal
。如果找不到,则使用默认模板。
ContentPresenter
呈现字符串使用的默认模板通过使用标签的ContentStringFormat
属性。
可能有两种解决方案:
- 使用Label.ContentStringFormat而不是Binding.StringFormat,或者
- 使用String属性(例如TextBlock.Text)代替Label.Content
这是使用Label.ContentStringFormat的方法:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
这是使用TextBlock的方法:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
注意:为简单起见,我在上面的解释中省略了一个细节:ContentPresenter
实际使用自身的Template
和StringFormat
属性,但是在加载过程中,这些属性会自动模板绑定到的ContentTemplate
和ContentStringFormat
属性Label
,因此似乎好像ContentPresenter
实际上是在使用Label
的属性。 。