it-swarm.com.ru

Используйте StringFormat для добавления строки в привязку WPF XAML

У меня есть приложение WPF 4, которое содержит TextBlock, который имеет одностороннюю привязку к целочисленному значению (в данном случае температура в градусах Цельсия). XAML выглядит так:

<TextBlock x:Name="textBlockTemperature"><Run Text="{Binding CelsiusTemp, Mode=OneWay}"/></TextBlock>

Это прекрасно работает для отображения фактического значения температуры, но я бы хотел отформатировать это значение, чтобы оно включало ° C вместо только числа (30 ° C вместо всего 30). Я читал о StringFormat и видел несколько общих примеров:

// format the bound value as a currency
<TextBlock Text="{Binding Amount, StringFormat={}{0:C}}" />

а также

// preface the bound value with a string and format it as a currency
<TextBlock Text="{Binding Amount, StringFormat=Amount: {0:C}}"/>

К сожалению, ни один из примеров, которые я видел, не добавлял строку к связанному значению, как я пытаюсь сделать. Я уверен, что это должно быть что-то простое, но мне не повезло найти его. Может кто-нибудь объяснить мне, как это сделать?

105
bmt22033

Ваш первый пример - это то, что вам нужно:

<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
178
Reed Copsey

Вот альтернатива, которая хорошо работает для удобства чтения, если у вас есть Binding в середине строки или несколько привязок:

<TextBlock>
  <Run Text="Temperature is "/>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>  
</TextBlock>

<!-- displays: 0°C (32°F)-->
<TextBlock>
  <Run Text="{Binding CelsiusTemp}"/>
  <Run Text="°C"/>
  <Run Text=" ("/>
  <Run Text="{Binding Fahrenheit}"/>
  <Run Text="°F)"/>
</TextBlock>
92
denis morozov

Обратите внимание, что использование StringFormat в привязках, похоже, работает только для "текстовых" свойств. Использование этого для Label.Content не будет работать

71
Casper Ehrenborg