我已经在我的xaml中的多个位置使用了这一行StringFormat={}{0:#,##0.00} ISK}
Visual Studio早已强调它,但它总是很好地编译。今天,这些条目中的每一个都会抛出3个错误,一个抱怨类型#不存在,另一个假设{000}期间有千位分隔符,最后是有空格。
是否有更可靠的方法将此数字格式化为字符串?
编辑: 为了完成,我解除了我在最后一个版本和当前版本之间所做的一个更改,只是为了确保它不会有些混乱。
答案 0 :(得分:1)
是否有更可靠的方法将此数字格式化为字符串?
我无法重现您编译代码的失败。 XAML编辑器确实抱怨,蓝色波浪线和关于未找到类型的投诉。如果你不介意编辑内警告,我希望你能够让它转换好。
但是,作为StringFormat
绑定属性的一般替代,您可以考虑使用简单的转换器:
class StringFormatConverter : IValueConverter
{
public string Format { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
dynamic o = value;
return o.ToString(Format);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
它适用于任何具有ToString(string)
方法的类型。您可以像这样使用它:
<Window x:Class="TestSO43152859StringFormatNumber.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:l="clr-namespace:TestSO43152859StringFormatNumber"
xmlns:s="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<s:Double>98123.45</s:Double>
</Window.DataContext>
<Window.Resources>
<l:StringFormatConverter x:Key="iskNumericConverter" Format="#,##0.00 ISK"/>
</Window.Resources>
<Grid>
<TextBlock HorizontalAlignment="Left" VerticalAlignment="Top"
Text="{Binding Converter={StaticResource iskNumericConverter}}"/>
</Grid>
</Window>