Wpf 绑定到日期时间的日期选择器&引用;字符串未被识别为有效的日期时间;

Wpf 绑定到日期时间的日期选择器&引用;字符串未被识别为有效的日期时间;,wpf,datepicker,Wpf,Datepicker,(免责声明:这个异常已经在许多其他线程中报告过,是的,我已经在谷歌搜索过,试图找到解决我问题的方法!!) 我有一个WPF应用程序,WPF ToolkitDatePicker控件绑定到DateTime变量: <UserControl x:Class="MikesApp.View.UserControls.FXRatesUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x

(免责声明:这个异常已经在许多其他线程中报告过,是的,我已经在谷歌搜索过,试图找到解决我问题的方法!!)

我有一个WPF应用程序,WPF ToolkitDatePicker控件绑定到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>
然后,出于绝望,使用以下代码:

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使用正确的文化?

我知道这不是一个直接的答案,但为了以防万一,您有权使用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失效?

我的笔记本电脑的区域设置设置为“English(United States)”。。。在任何人建议我检查之前!谢谢你的回复。不,在我的DatePicker声明中没有改变任何与文化有关的内容。请记住,它确实获得了正确的区域性(en-US),但随后获得了此区域性的错误日期格式。。。这就是我困惑的地方。我不打算研究Telerik工具,我有一个备份计划,如果没有人能建议一个WPFtoolkit友好的解决方案!嗯,那真是一团糟。我会把你的问题记在脑后,以防我在白天看到任何东西,但祝你好运。我能想到的唯一其他方法是在绑定中抛出一个转换器,强制格式。。。