Wpf 将Double绑定到文本框

Wpf 将Double绑定到文本框,wpf,xaml,data-binding,ivalueconverter,Wpf,Xaml,Data Binding,Ivalueconverter,我经常使用TextBox绑定整数,没有太多问题 但是,如果我尝试将文本框绑定到一个双精度文本框,它将不起作用 当我输入5,85(,作为我的小数分隔符)时,我将585.0传递给双精度值 它是如何转换的,我可以使用什么解决方案来修复它?ValueConverter是最好的解决方案吗?您可以尝试将其添加到应用程序的构造函数中: FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),

我经常使用TextBox绑定整数,没有太多问题

但是,如果我尝试将文本框绑定到一个双精度文本框,它将不起作用

当我输入5,85(,作为我的小数分隔符)时,我将585.0传递给双精度值


它是如何转换的,我可以使用什么解决方案来修复它?ValueConverter是最好的解决方案吗?

您可以尝试将其添加到应用程序的构造函数中:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
             new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

但是,请注意,如果自定义十进制分隔符,则此操作将不起作用。()

出于诊断目的,您可以将这两行代码添加到程序的开头

    var cc = Thread.CurrentThread.CurrentCulture;
    var cuic = Thread.CurrentThread.CurrentUICulture;
并比较结果。“cuic”文化很有可能持有“en-US”,因为UI线程通常是这样做的。您可以通过在项目文件中设置
标记来更改此设置,也可以尝试作为诊断

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

并评估副作用。否则,您可以实现一个IValueConverter…

这听起来可能不是十进制分隔符,或者应用程序不关心区域性。我正在调试并确保
NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
与我想象的一样。这是正确的属性,不是吗?为什么不在主窗口构造函数中简单地设置Language=XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)?Clemens,您的解决方案也可以工作,但您必须记住,与“应用程序构造函数方法”相比,您在应用程序中创建的每个窗口都要单独放置解决方案。在“应用程序构造函数方法”中,为应用程序中的所有框架元素设置了语言。您是对的。在这种情况下,覆盖内置依赖项属性的默认值是有意义的。