您可以使用值转换器来实现此操作,但并非必须。您可以通过绑定标记扩展的StringFormat属性指定一个三部分自定义数字格式字符串来简单实现。它看起来像这样:
三部分自定义数字格式字符串。
<TextBox Text="{Binding Path=Amount, StringFormat='0.00;-0.00;#'}" />
分号在字符串格式中告诉.NET使用第一部分来格式化正数,使用中间部分来格式化负数,最后一部分用于格式化零值。棘手的部分是如何获取空字符串以用于零部分,我已经使用井号(#)符号代替。此格式说明符在其位置显示一个有效数字,但由于该值在使用该部分时始终为零,因此结果为空字符串。
请注意,StringFormat需要Silverlight 4。如果您正在使用Silverlight 3,则需要使用值转换器。(您可能希望更加健壮地处理错误...)
public class ZeroConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return String.Format(culture, "{0:0.00;-0.00;#}", value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string str = value as string;
if (!String.IsNullOrEmpty(str)) {
return System.Convert.ChangeType(str, targetType, culture);
}
return System.Convert.ChangeType(0, targetType, culture);
}
}
XAML
<UserControl>
<UserControl.Resources>
<local:ZeroConverter x:Key="ZeroToEmpty" />
</UserControl.Resources>
</UserControl>
<TextBox Text="{Binding Path=Amount, Converter={StaticResource ZeroToEmpty}}" />