【发布时间】:2018-07-05 11:22:26
【问题描述】:
我有一个在 WPF 中似乎无法解决的非常非常小的问题。
我需要为我的应用程序自定义 NumberFormatInfo 和 DateFormatInfo,并且不想在每次使用数字或日期时都在 XAML 中使用 StringFormat 选项。
所以我尝试像这样在全球范围内全球化它:
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)));
}
这行不通。无论我在做什么,我的 gui 上的 DateTime 和 Decimal 值都不会受到影响。
我让它与CultureAndRegionInfoBuilder 一起工作,但它需要管理权限。这不是我想要的。
有什么建议吗? 谢谢
【问题讨论】:
-
您只能将 FrameworkElement.Language 属性设置为 语言,而不能设置为自定义
CultureInfo。CultureInfo.CurrentCulture.IetfLanguageTag返回不受NumberFormat或DateTimeFormat属性CultureInfo.CurrentCulture影响的语言标记。 -
也就是说我不能全局设置numberformat?
-
不使用这种方法,但您可以定义自定义绑定。看我的回答。
标签: c# wpf xaml globalization