(免责声明:此异常已在许多其他线程中报告过,是的,我已经在Google 上搜索过,试图找到解决我的问题的方法!!)
我有一个 WPF 应用程序,其中WPF Toolkit DatePicker控件绑定到 DateTime 变量:
<UserControl x:Class="MikesApp.View.UserControls.FXRatesUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
<toolkit:DatePicker x:Name="fxDate" VerticalAlignment="Center"
Text="{Binding Selected_FXRate_Date, Mode=TwoWay}"
Style="{DynamicResource DatePickerStyle1}" >
</toolkit:DatePicker>
每当我输入一个日期,例如 2012 年 4 月 20 日,DatePicker 控件似乎认为它实际上是英国日期格式 (dd/MM/yyyy),并且 WPFtoolkit 源代码抛出异常“字符串未被识别为有效的日期时间。”
这会突然阻止 WPF 向应用程序的其他部分执行更改通知,这些部分需要知道此日期何时更改。
我很困惑。
我的笔记本电脑设置为以 MM/dd/yyyy 格式显示日期,我特别尝试告诉我的应用使用这种美国日期格式,首先使用以下代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "MMM-dd-yyyy";
Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern = "MMM-dd-yyyy hh:mm:ss";
然后,出于绝望,使用以下代码:
CultureInfo ci = new CultureInfo("en-US");
ci.DateTimeFormat.SetAllDateTimePatterns(new string[] { "MM/dd/yyyy" }, 'd' );
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
但无论我尝试什么,每当我选择无法使用 dd/MMM/yyyy 解析的日期时,DatePicker 都会引发异常。
如果我查看引发异常的代码行(取自 WPF Toolkit SDK 中的 DatePicker.cs):
newSelectedDate = DateTime.Parse(text, DateTimeHelper.GetDateFormat(DateTimeHelper.GetCulture(this)));
..我发现“ DateTimeHelper.GetCulture(this) ”确实正确返回“en-US”,但GetDateFormat函数的日期格式错误。它以某种方式返回 dd/MMM/yyyy,而不是 MMM/dd/yyyy。
我真的很困惑。
我什至尝试将GetDateFormat函数(取自 WPFtoolkit 源代码中的以下路径)剪切到我的应用程序中,并试图让它重现“错误的日期格式”问题......但是当它在我的代码,它运行良好,并且每次都正确解析 MMM/dd/yyyy 日期。
WPFtoolkit\Calendar\Microsoft\Windows\Controls\DateTimeHelper.cs
为什么 WPFtoolkit 代码与使用它的 WPF 应用程序代码具有不同的文化?
我怎样才能让 WPFtoolkit 使用正确的 Culture ?