Der Grund, warum dies nicht funktioniert, ist, dass die Label.Content
Eigenschaft vom Typ Object
ist und Binding.StringFormat
nur beim Binden an eine Eigenschaft vom Typ verwendet wird String
.
Was passiert ist:
- Das
Binding
boxt Ihren MaxLevelOfInvestment
Wert und speichert die Label.Content
Eigenschaft als dezimalen Boxwert.
- Das Label-Steuerelement verfügt über eine Vorlage, die a enthält
ContentPresenter
.
- Da
ContentTemplate
nicht gesetzt ist, ContentPresenter
sucht nach einem DataTemplate
für den Decimal
Typ definierten . Wenn keine gefunden wird, wird eine Standardvorlage verwendet.
- Die Standardvorlage, die von den
ContentPresenter
Present-Zeichenfolgen mithilfe der ContentStringFormat
Eigenschaft des Labels verwendet wird .
Zwei Lösungen sind möglich:
- Verwenden Sie Label.ContentStringFormat anstelle von Binding.StringFormat oder
- Verwenden Sie eine String-Eigenschaft wie TextBlock.Text anstelle von Label.Content
So verwenden Sie Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
So verwenden Sie einen TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
Hinweis: Der Einfachheit halber habe ich in der obigen Erklärung ein Detail weggelassen: Das verwendet ContentPresenter
tatsächlich seine eigenen Template
und StringFormat
Eigenschaften, aber während des Ladens werden diese automatisch an die ContentTemplate
und ContentStringFormat
Eigenschaften des und gebunden Label
, sodass es so aussieht, als ob das ContentPresenter
tatsächlich die Label
Eigenschaften des verwendet .