WPF StringFormat问题

时间:2017-04-01 04:32:43

标签: c# wpf

我已经在我的xaml中的多个位置使用了这一行StringFormat={}{0:#,##0.00} ISK}

Visual Studio早已强调它,但它总是很好地编译。今天,这些条目中的每一个都会抛出3个错误,一个抱怨类型#不存在,另一个假设{000}期间有千位分隔符,最后是有空格。

是否有更可靠的方法将此数字格式化为字符串?

编辑: 为了完成,我解除了我在最后一个版本和当前版本之间所做的一个更改,只是为了确保它不会有些混乱。

1 个答案:

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