您可以为此使用值转换器,但您不需要。您可以简单地使用 Binding 标记扩展的 StringFormat 来指定 three-part custom numeric format string。它看起来像这样:
<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}}" />