(免责声明:此异常已在众多其他主题中报告过,是的,我已用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>
每当我输入日期时,例如4/20/2012,DatePicker控件似乎认为它实际上是英国日期格式(dd / MM / yyyy),而WPFtoolkit源代码会抛出“”的异常字符串未被识别为有效的DateTime 。“
这突然停止了WPF向应用程序的其他部分执行更改通知的任何机会,这需要知道此日期何时更改。
Screenshot of VS2010 exception
我很困惑。
我的笔记本电脑设置为以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 \日历\微软\的Windows \控制\ DateTimeHelper.cs
为什么WPFtoolkit代码与我的WPF应用程序的代码有不同的文化?
我怎样才能让WPFtoolkit使用正确的文化?
答案 0 :(得分:0)
我知道这不是一个直接的答案,但为了防止它有帮助,您是否可以访问telerik工具?他们的RadDateTimePicker具有您可以设置/强制执行的文化依赖属性(类型为CultureInfo):
<telerik:RadDateTimePicker x:Name="fxDate" VerticalAlignment="Center"
Culture ="{Binding Culture}"
Text="{Binding Selected_FXRate_Date, Mode=TwoWay}"
Style="{DynamicResource DatePickerStyle1}" >
此外,我很确定你会说“当然不是”,但为了以防万一,你是否正在做一些事情,比如重写你的DatePickerStyle1中可能抛出TemplateBinding的模板?