У меня действительно очень маленькая проблема, которая кажется неразрешимой в WPF.
Мне нужны пользовательские NumberFormatInfo
и DateFormatInfo
для моего приложения, и я не хочу использовать опцию StringFormat
в XAML каждый раз, когда я использую число или дату.
Итак, я попытался глобализировать это глобально, как это:
private void SetCulture()
{
var cultureInfo = CultureInfo.CurrentCulture;
if (!string.IsNullOrEmpty(Settings.Default.LanguageOverride))
cultureInfo = new CultureInfo(Settings.Default.LanguageOverride);
cultureInfo.NumberFormat.NumberDecimalDigits = 2;
cultureInfo.NumberFormat.NumberDecimalSeparator = ",";
cultureInfo.NumberFormat.NumberGroupSeparator = ".";
cultureInfo.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy";
cultureInfo.DateTimeFormat.FullDateTimePattern = "dd.MM.yyyy";
cultureInfo.DateTimeFormat.ShortTimePattern = "HH:mm";
cultureInfo.DateTimeFormat.LongDatePattern = "dd.MM.yyyy";
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm";
SetCulture(cultureInfo);
}
private void SetCulture(CultureInfo cultureInfo)
{
LocalizeDictionary.Instance.IncludeInvariantCulture = false;
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
LocalizeDictionary.Instance.Culture = cultureInfo;
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
Это не работает. DateTime
и Decimal
значения на моем графическом интерфейсе не влияют, независимо от того, что я делаю.
Я заставил его работать с CultureAndRegionInfoBuilder
, но для этого нужны административные привилегии. Это не то, что я хочу.
Есть предложения?
Спасибо