(免責事項:この例外は他の多くのスレッドで報告されています。はい、私の問題の解決策を見つけようとしてグーグルで検索しました!!)
私はWPF Toolkit DatePickerコントロールがDateTime変数にバインドされたWPFアプリケーションを持っています:
<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 ソース コードは「文字列は a として認識されませんでした」という例外をスローします。有効な日時."
これにより、この日付がいつ変更されるかを知る必要があるアプリの他の部分に対して、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関数は間違った日付形式を取得しています。MMM/dd/yyyy ではなく、どういうわけか dd/MMM/yyyy を返しています。
私は本当に混乱しています。
GetDateFormat関数 ( WPFtoolkitソース コードの次のパスから取得) をアプリにカットアンドペーストして、「間違った日付形式」の問題を再現しようとしましたが、私のコード、それは正常に動作し、MMM/dd/yyyy の日付を毎回正しく解析します。
WPFtoolkit\Calendar\Microsoft\Windows\Controls\DateTimeHelper.cs
WPFtoolkit コードが、それを使用する WPF アプリケーションのコードとは異なるカルチャを持つのはなぜですか?
また、WPFtoolkit で正しい Culture を使用するにはどうすればよいですか?