Причина, по якій це не працює, полягає в тому, що Label.Content
властивість має тип Object
і Binding.StringFormat
використовується лише при прив’язці до властивості типу String
.
Те, що відбувається:
- Це
Binding
боксує ваше MaxLevelOfInvestment
значення та зберігає його Label.Content
властивість у вигляді десяткового значення в коробці.
- Елемент керування Label має шаблон, який містить
ContentPresenter
.
- Оскільки
ContentTemplate
не встановлено, ContentPresenter
шукає DataTemplate
визначений для Decimal
типу. Коли він не знаходить жодного, він використовує шаблон за замовчуванням.
- Шаблон за замовчуванням, який використовується
ContentPresenter
представленими рядками за допомогою ContentStringFormat
властивості мітки .
Можливі два рішення:
- Використовуйте Label.ContentStringFormat замість Binding.StringFormat або
- Використовуйте властивість String, наприклад TextBlock.Text, замість Label.Content
Ось як використовувати Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
Ось як використовувати TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
Примітка: Для простоти я опустив одну деталі в наведеному вище поясненні: на ContentPresenter
самому ділі використовує своє власне Template
і StringFormat
властивість, але при завантаженні вони автоматично шаблони прив'язані до ContentTemplate
і ContentStringFormat
властивостями Label
, так що здається , ніби ContentPresenter
насправді , використовуючи Label
властивості «s .