使用 StringFormat 将字符串添加到 WPF XAML 绑定

本文关键字:WPF XAML 绑定 添加 StringFormat 字符串 使用 | 更新日期: 2023-09-27 18:34:32

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

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

使用 StringFormat 将字符串添加到 WPF XAML 绑定

你的第一个例子实际上是你需要的:

<TextBlock Text="{Binding CelsiusTemp, StringFormat={}{0}°C}" />
如果

字符串中间有绑定或多个绑定,则下面是一个很好的可读性:

<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>

请注意,在绑定中使用 StringFormat 似乎仅适用于"文本"属性。将其用于标签.内容将不起作用

在 xaml 中

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

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

 public string CelsiusTemp
        {
            get { return string.Format("{0}°C", _CelsiusTemp); }
            set
            {
                value = value.Replace("°C", "");
              _CelsiusTemp = value;
            }
        }