WPF StringFormat sur l'Étiquette de Contenu
Je veux formater ma chaîne de liaison comme Amount is X
où X
est une propriété lié à un label.
J'ai vu de nombreux exemples, mais le suivant ne fonctionne pas:
<Label Content="{Binding Path=MaxLevelofInvestment,
StringFormat='Amount is {0}'}" />
J'ai aussi essayé ces combinaisons:
StringFormat=Amount is {0}
StringFormat='Amount is {}{0}'
StringFormat='Amount is \{0\}'
J'ai même essayé de changer la propriété de liaison du type de données à int
, string
et double
. Rien ne semble fonctionner. C'est un très commun de cas d'utilisation, mais ne semble pas être pris en charge.
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle cela ne fonctionne pas, c'est que le
Label.Content
de la propriété est de typeObject
, etBinding.StringFormat
est utilisé uniquement lors de la liaison à une propriété de typeString
.Ce qui se passe est:
Binding
est la boxe votreMaxLevelOfInvestment
de la valeur et de la stocker lesLabel.Content
propriété comme une boîte à valeur décimale.ContentPresenter
.ContentTemplate
n'est pas définie,ContentPresenter
recherche unDataTemplate
défini pour leDecimal
type. Quand il n'en trouve aucun, il utilise un modèle par défaut.ContentPresenter
présente des chaînes à l'aide de l'étiquetteContentStringFormat
propriété.Deux solutions sont possibles:
Ici est de savoir comment utiliser l'Étiquette.ContentStringFormat:
Ici est de savoir comment utiliser un TextBlock:
Remarque: Pour des raisons de simplicité j'ai omis un détail, dans l'explication ci-dessus: Le
ContentPresenter
utilise son propreTemplate
etStringFormat
propriétés, mais pendant le chargement de ceux-ci sont automatiquement un modèle lié à laContentTemplate
etContentStringFormat
propriétés de laLabel
, il me semble que si leContentPresenter
est fait à l'aide de laLabel
's propriétés.Content="{Binding MaxLevelofInvestment}"
et il fonctionne très bien...Faire un universel
StringFormatConverter : IValueConverter
. Passer votre chaîne de format commeConverterParameter
.Aussi, faire
StringFormatMultiConverter : IMultiValueConverter
lorsque vous avez besoin de plus d'un objet dans la chaîne de format, par exemple,Completed {0} tasks out of {1}
.XAML
approche ou la valeur convertisseur.Je viens de vérifier et pour quelque raison il ne fonctionne pas avec l'Étiquette, probablement parce qu'il utilise un ContentPresenter pour la propriété de Contenu en interne. Vous pouvez utiliser un TextBlock place et qui fonctionne. Vous pouvez également mettre le TextBlock extrait ci-dessous dans le contenu d'une Étiquette si vous avez besoin d'hériter de style, comportement etc.
Essayez d'utiliser un convertisseur....
Peut-être que cela vous aidera...
Code d'intégration dans le code XAML