逗号作为DataGrid中的十进制分隔符

时间:2018-10-10 13:06:09

标签: c# wpf

我有一个自定义的DataGrid,它为一个月的每一天创建一列,并将其内容绑定到给定的列表。列表的值是双精度。

现在我想更改输入,以便用户可以写3.12而不是3.12。 我试图更改不起作用的cultureinfo,还尝试为绑定设置StringFormat,但它也无法正常工作。一种解决方案是编写一个转换器,但我认为可能会有更好的方法来实现此目的,尤其是因为我不想为更通用的数据网格使用特定的转换器。

所以我的问题是,您将如何实现?最好的方法是什么。

编辑:发布问题后,我找到了解决方案。

Wpf始终使用“ en-US”文化,您可以通过添加来更改整个程序中的此行为

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

或仅将其更改为像这样的特定绑定

            Binding contentBinding = new Binding(PATH);
            contentBinding.ConverterCulture = CultureInfo.CurrentCulture;
            textColumn.Binding = contentBinding;

请注意,由于textColumn.Binding的类型不是Binding,而是BindingBase,而后者不再提供ConverterCulture属性,因此您必须采取更多的绑定操作。

答案来自StringFormat Localization issues in wpf

1 个答案:

答案 0 :(得分:0)

这样,您可以为应用程序全局设置以使用Windows文化。 因此,如果您使用的是英语窗口,则将使用点号;如果您使用的是德语窗口,则将使用逗号。

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

请记住,此解决方案是全局设置的。