La razón por la que esto no funciona es que la Label.Contentpropiedad es de tipo Objecty Binding.StringFormatsolo se usa cuando se vincula a una propiedad de tipo String.
Lo que esta pasando es:
- Se
Bindingcoloca en caja su MaxLevelOfInvestmentvalor y se almacena la Label.Contentpropiedad como un valor decimal en caja.
- El control Etiqueta tiene una plantilla que incluye un
ContentPresenter.
- Como
ContentTemplateno está establecido, ContentPresenterbusca un DataTemplatedefinido para el Decimaltipo. Cuando no encuentra ninguno, utiliza una plantilla predeterminada.
- La plantilla predeterminada utilizada por las
ContentPresentercadenas de presenta mediante el uso de la ContentStringFormatpropiedad 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 ContentPresenterrealidad utiliza sus propios Templatey StringFormatpropiedades, pero durante la carga de estos son automáticamente la plantilla unida a los ContentTemplatey las ContentStringFormatpropiedades de la Label, por lo que parece como si la ContentPresenterrealidad está utilizando las Labelpropiedades '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 : IMultiValueConvertercuando se necesita más de un objeto en la cadena de formato, por ejemplo,Completed {0} tasks out of {1}.fuente
XAMLenfoque 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