这不起作用的原因是该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的属性。 。