Насправді ви можете встановити культуру потоків за замовчуванням та культуру інтерфейсу користувача, але лише за допомогою версії 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;
}
і поставте точку перерви в методі Перетворення ValueConverter, щоб побачити, що надійшло на інший кінець. CultureInfo.CurrentUICulture перестала бути американською, і натомість стала en-AU у комплекті з моїм маленьким хаком, щоб змусити її дотримуватися регіональних налаштувань для ShortTimePattern.
Ура, у світі все добре! Чи ні. Параметр культури, переданий методу Convert, все ще знаходиться в режимі «США». Ем, WTF ?! Але це початок. Принаймні таким чином
- ви можете виправити культуру інтерфейсу один раз, коли додаток завантажується
- це завжди доступно з
CultureInfo.CurrentUICulture
string.Format("{0}", DateTime.Now)
використовуватиме ваші спеціалізовані регіональні налаштування
Якщо ви не можете використовувати версію 4.5 фреймворку, тоді відмовтесь від установки CurrentUICulture як статичної властивості CultureInfo та встановіть її як статичну властивість одного з власних класів. Це не виправить поведінку string.Format або змусить StringFormat працювати належним чином у прив'язках, потім перейдіть до логічного дерева додатка, щоб відтворити всі прив’язки у вашому додатку та встановити їх культуру перетворювача.