我们有一个文本框的代码,如下所示:
<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}}" />