双倍小数分隔符 WPF
Posted
技术标签:
【中文标题】双倍小数分隔符 WPF【英文标题】:Doubles decimal separator WPF 【发布时间】:2017-07-03 10:16:27 【问题描述】:在 WPF 中使用 TextBox 我会遇到问题,如果我使用 ',' 而不是 '.'每次我尝试获取值时,TextBox 内的文本都会转换为相同的数字,不带逗号..
如何禁用此自动转换?
<TextBox
x:Name="XValue"
Text="Binding XInitValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"
Width="80" VerticalAlignment="Center"
TextChanged="XValue_TextChanged"
</TextBox>
private void XValue_TextChanged(object sender, TextChangedEventArgs e)
double a = XInitValue;
【问题讨论】:
请看这个答案:***.com/questions/9160059/… 【参考方案1】:我用转换器解决了这个问题
public class DecimalConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
if(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ".")
return value.ToString().Replace(",", ".");
else
return value.ToString().Replace(".", ",");
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
if (CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ".")
return value.ToString().Replace(".", ",");
else
return value.ToString().Replace(",", ".");
【讨论】:
【参考方案2】:真的好用!谢谢!
我已将其更改为更通用,不要在转换器本身中使用 CurrentCulture,如果输入的值以小数分隔符结尾,则会返回错误。如果没有最后一部分,如果 UpdateSourceTrigger=PropertyChanged,我根本无法输入小数点分隔符。
public class DecimalConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
return value;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
if (value == null)
return null;
if (value is string stringValue && targetType == typeof(decimal))
var decSeparator = culture.NumberFormat.NumberDecimalSeparator;
var normString = decSeparator == "."
? stringValue.Replace(",", ".")
: stringValue.Replace(".", ",");
if (!normString.EndsWith(decSeparator) && decimal.TryParse(normString, out var decResult))
return decResult;
return DependencyProperty.UnsetValue;
当然,CurrentCulture 应该在 App.xml.cs 或其他地方在启动应用程序时设置:
var culture = CultureInfo.GetCultureInfo("de-DE");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(culture.IetfLanguageTag)));
【讨论】:
以上是关于双倍小数分隔符 WPF的主要内容,如果未能解决你的问题,请参考以下文章
如何为多个文本框使用一个绑定来分隔 WPF XAML 中的三位数字?