接受","作为小数点的 xaml 字符串格式



我们有一个文本框的代码,如下所示:

<TextBox  Width="120" Grid.Column="2" Text="{Binding xxxxx, StringFormat={0:F2}%}"
VerticalContentAlignment="Center" HorizontalAlignment="Left" >

问题是,用户坚持认为有必要使用",">作为小数点,因为多年来一直是这样做的。

现在的格式化只是跳过它,所以如果你键入22,33%,它就会变成2233%。

我有没有办法让StringFormat同时接受".">",">作为小数点,或者我必须用其他方式格式化它(我是WPF和xaml的新手,所以可能错过了一些明显的东西(?

您可以使用转换器以编程方式解析值:

public class FormatConverter : IValueConverter
{
private static readonly CultureInfo s_cultureInfo = new CultureInfo("de");
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
((decimal)value).ToString("F2") + "%";
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string a = value.ToString();
decimal d;
if ((a?.Contains(",") == true && decimal.TryParse(a, NumberStyles.Any, s_cultureInfo, out d))
|| decimal.TryParse(a, NumberStyles.Any, CultureInfo.InvariantCulture, out d))
return d;
return Binding.DoNothing;
}
}

在尝试将包含逗号的string转换为decimal时,上面的示例实现使用了支持,的区域性。

以下是您在XAML标记中使用它的方式:

<Window.Resources>
<local:FormatConverter x:Key="conv" />
</Window.Resources>
...
<TextBox  Width="120" Grid.Column="2"
Text="{Binding xxxxx, Converter={StaticResource conv}}"  />

最新更新