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 .
Content="{Binding MaxLevelofInvestment}"
y funciona bien ...{0}
, no olvide poner{}
antes. Así queContentStringFormat="{}{0} some text here"
Haz un universal
StringFormatConverter : IValueConverter
. Pase su cadena de formato comoConverterParameter
.Label Content="{Binding Amount, Converter={...myConverter}, ConverterParameter='Amount is {0}'"
Además, asegúrese
StringFormatMultiConverter : IMultiValueConverter
cuando se necesita más de un objeto en la cadena de formato, por ejemplo,Completed {0} tasks out of {1}
.fuente
XAML
enfoque puro como el convertidor de valor.Acabo de verificar y por alguna razón no funciona con la etiqueta, probablemente porque usa un ContentPresenter para la propiedad Content internamente. Puedes usar TextBlock en su lugar y eso funcionará. También puede colocar el extracto de TextBlock a continuación en el contenido de una etiqueta si necesita heredar el estilo, el comportamiento, etc.
fuente
Intenta usar un convertidor ...
<myconverters:MyConverter x:Key="MyConverter"/> <Label Content="{Binding Path=MaxLevelofInvestment, Converter={StaticResource MyConverter"} /> public class MyConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return String.Format("Amount is {0}", value); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value; } }
fuente
Tal vez esto ayude...
Insertar código en XAML
fuente