141

我有一个 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}}"/>

不幸的是,我所看到的所有示例都没有像我尝试做的那样将字符串附加到绑定值。我敢肯定它一定很简单,但我没有找到它。谁能向我解释如何做到这一点?

4

4 回答 4

265

您的第一个示例实际上就是您所需要的:

<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
于 2013-10-09T17:22:05.197 回答
124

如果您在字符串的中间有 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>
于 2015-01-07T16:35:19.840 回答
118

请注意,在 Bindings 中使用 StringFormat 似乎仅适用于“文本”属性。将其用于 Label.Content将不起作用

于 2017-03-21T08:35:17.070 回答
-12

在xml中

<TextBlock Text="{Binding CelsiusTemp}" />

ViewModel中,这种设置值的方式也有效:

 public string CelsiusTemp
        {
            get { return string.Format("{0}°C", _CelsiusTemp); }
            set
            {
                value = value.Replace("°C", "");
              _CelsiusTemp = value;
            }
        }
于 2016-04-15T09:25:07.533 回答