繁体   English   中英

WPF文化问题

[英]WPF Culture issue

我想在应用程序的主页上以法语格式显示日期:(dd / MM / yyyy)我使用Entity Framework对象,并且日期是绑定到xaml文件中组合框的实体列表的属性。 。

我设法在应用启动时通过添加以下代码来解决这个问题:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

但是我在此添加项时遇到了一个新问题:我所有的十进制数字都使用逗号而不是在应用程序的其他页面中使用点...此更改不再适用于ma应用程序...

所以,您能给我一个整体解决问题的解决方案吗...总结一下,我需要法语日期格式和带点的十进制。 我希望不必更改代码每一行的区域性。

我已经尝试在相关页面中添加此行,但是没有用。

 Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

谢谢

如果您只想在单个控件中更改日期格式,那么更改应用程序范围内的语言环境是不可行的。 ComboBox上设置一个自定义的ItemTemplate ,并在Binding上将StringFormat设置为'dd/MM/yyyy'

如果您确实需要在整个应用程序中更改日期格式,但又希望保持其他格式不变,则可以在启动时基于当前语言环境应用自定义语言环境,但是要使其在WPF中正常工作需要进行一些麻烦的思考。

var currentCulture = CultureInfo.CurrentCulture;
if (currentCulture.IsReadOnly)
    currentCulture = new CultureInfo(currentCulture.IetfLanguageTag, true);

currentCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

// ...adjust other patterns accordingly...

// WARNING: Ugly reflection hacking ahead...

var defaultValueField = typeof(PropertyMetadata).GetField(
    "_defaultValue",
    BindingFlags.NonPublic | BindingFlags.Instance);

var equivalentCultureField = typeof(XmlLanguage).GetField(
    "_equivalentCulture",
    BindingFlags.NonPublic | BindingFlags.Instance);

if (defaultValueField != null &&
    equivalentCultureField != null)
{
    var xmlLanguage = XmlLanguage.GetLanguage(currentCulture.IetfLanguageTag);

    equivalentCultureField.SetValue(
        xmlLanguage,
        currentCulture);

    defaultValueField.SetValue(
        FrameworkElement.LanguageProperty.DefaultMetadata,
        xmlLanguage);
}

Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;

确保在启动过程中尽早从主线程执行此操作。 但是请注意,这影响整个程序 ,而不仅仅是WPF可视位。 例如,它可能会影响日志中的时间戳格式等。

就个人而言,作为在具有多个区域设置的公司中工作的人,我发现在所有日期中简单地使用ISO标准yyyy-MM-dd格式会减少混乱。 d/MM/yyyyMM/d/yyyy格式需要MM/d/yyyy

一种解决方案是使不同的资源文件具有基于区域的相同键和值,并使用区域性来加载各自的区域值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM