Работает ли функция StringFormat в WPF Xaml с Label.Content?

Я связал свое свойство содержимого метки Amount с десятичным свойством через DataContext. Я пытаюсь применить строковый формат, но не вижу эффекта. Работает ли функция StringFormat с элементами управления Label? Скажите, пожалуйста, на каких элементах управления работает эта функция. Кстати, ниже приведен код для элемента управления меткой, для которого я хочу применить форматирование валюты.

<Label Grid.Column="2" Content="{Binding Path=Amount, StringFormat={}{0:C}}" Height="23" HorizontalAlignment="Left" Margin="100,10,0,0" Name="tb" VerticalAlignment="Bottom" Width="120" />

person Pankaj Upadhyay    schedule 24.01.2011    source источник


Ответы (2)


StringFormat работает со свойствами типа string (когда объект, к которому вы привязываете, преобразуется в строку, применяется строковый формат). Свойство Content относится к типу Object.

Вы можете разместить TextBlock внутри своей метки, чтобы добиться желаемого эффекта:

<Label Grid.Column="2" Height="23" HorizontalAlignment="Left" Margin="100,10,0,0" Name="tb" VerticalAlignment="Bottom" Width="120">
   <TextBlock Text="{Binding Path=Amount, StringFormat={}{0:C}}"/>
</Label>
person Pavlo Glazkov    schedule 24.01.2011
comment
Это действительно странная ситуация. Я могу применить строковый формат для GridViewColumns и Textblock, определенных в dataTemplate в App.xaml, но когда я определяю тот же TextBlock на странице, он не работает ?? Работает ли StringFormatting, когда элемент управления привязан к DataContext ?? - person Pankaj Upadhyay; 25.01.2011
comment
Хорошо, насколько я понимаю, для работы StringFormat должны быть выполнены два условия: целевое свойство вашей привязки должно быть строкового типа (например, свойство Text в текстовом блоке), а исходное свойство (Amount) НЕ должно быть нить. Также прочтите документацию на MSDN: msdn.microsoft .com / ru-ru / library /. - person Pavlo Glazkov; 25.01.2011

Попробуйте ContentStringFormat

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/866f7934-8b10-4872-b306-122674fad5fa/.

<Label Content=”{Binding Amount}” ContentStringFormat=”C” /> 
person JamesM    schedule 26.03.2012
comment
Однако ContentStringFormat работает только с .NET 4.0. Но это, безусловно, намного чище, чем принятый ответ. - person Wasabi; 08.05.2014
comment
Для потомков: если вы начинаете ContentStringFormat с {0}, не забудьте поставить перед ним {}. Так сделай это ContentStringFormat="{}{0} some text here" - person jep; 10.09.2019
comment
Это работает до тех пор, пока вы не хотите, чтобы строковый формат применялся к TargetNullValue, тогда формат должен быть в той же привязке, что и TargetNullValue, и путь привязки, что означает, что необходим ответ Павло - person Dutchmanjonny; 24.07.2020