La razón por la que esto no funciona es que la Label.Content
propiedad es de tipo Object
y Binding.StringFormat
solo se usa cuando se vincula a una propiedad de tipo String
.
Lo que esta pasando es:
- Se
Binding
coloca en caja su MaxLevelOfInvestment
valor y se almacena la Label.Content
propiedad como un valor decimal en caja.
- El control Etiqueta tiene una plantilla que incluye un
ContentPresenter
.
- Como
ContentTemplate
no está establecido, ContentPresenter
busca un DataTemplate
definido para el Decimal
tipo. Cuando no encuentra ninguno, utiliza una plantilla predeterminada.
- La plantilla predeterminada utilizada por las
ContentPresenter
cadenas de presenta mediante el uso de la ContentStringFormat
propiedad de la etiqueta .
Son posibles dos soluciones:
- Utilice Label.ContentStringFormat en lugar de Binding.StringFormat, o
- Utilice una propiedad String como TextBlock.Text en lugar de Label.Content
A continuación, se explica cómo utilizar Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
A continuación se explica cómo usar un TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
Nota: Para simplificar he omitido un detalle de la explicación anterior: La ContentPresenter
realidad utiliza sus propios Template
y StringFormat
propiedades, pero durante la carga de estos son automáticamente la plantilla unida a los ContentTemplate
y las ContentStringFormat
propiedades de la Label
, por lo que parece como si la ContentPresenter
realidad está utilizando las Label
propiedades 's .