На самом деле вы можете установить культуру потоков по умолчанию и культуру пользовательского интерфейса, но только с Framework 4.5+
Я вставил в этот статический конструктор
static MainWindow()
{
CultureInfo culture = CultureInfo
.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
var dtf = culture.DateTimeFormat;
dtf.ShortTimePattern = (string)Microsoft.Win32.Registry.GetValue(
"HKEY_CURRENT_USER\\Control Panel\\International", "sShortTime", "hh:mm tt");
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
и установите точку останова в методе Convert объекта ValueConverter, чтобы увидеть, что получено на другом конце. CultureInfo.CurrentUICulture перестал быть en-US и вместо этого стал en-AU с моим маленьким хакером, чтобы он учитывал региональные настройки для ShortTimePattern.
Ура, все хорошо на свете! Или не. Параметр культуры, переданный методу Convert, по- прежнему используется в США. Хм, WTF ?! Но это начало. По крайней мере, так
- вы можете исправить культуру пользовательского интерфейса один раз, когда ваше приложение загружается
- это всегда доступно из
CultureInfo.CurrentUICulture
string.Format("{0}", DateTime.Now)
будет использовать ваши индивидуальные региональные настройки
Если вы не можете использовать версию 4.5 платформы, то откажитесь от установки CurrentUICulture как статического свойства CultureInfo и установите его как статическое свойство одного из ваших собственных классов. Это не исправит поведение по умолчанию для string.Format или заставит StringFormat работать должным образом в привязках, затем обойдёт логическое дерево вашего приложения, чтобы воссоздать все привязки в вашем приложении и установить их культуру конвертера.