C# WPF应用程序使用错误的语言格式化DateTime

C# WPF应用程序使用错误的语言格式化DateTime,c#,.net,wpf,culture,C#,.net,Wpf,Culture,我正在使用Visual Studio 2015开发一个WPF应用程序,它是用法语安装的,但我使用的是英语语言包。我有法式Windows 10,法式键盘布局,Windows区域是加拿大。在我的应用程序中,我在应用程序启动中使用以下代码明确地将区域性设置为“en CA”: var culture = CultureInfo.GetCultureInfo("en-CA"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThr

我正在使用Visual Studio 2015开发一个WPF应用程序,它是用法语安装的,但我使用的是英语语言包。我有法式Windows 10,法式键盘布局,Windows区域是加拿大。在我的应用程序中,我在应用程序启动中使用以下代码明确地将区域性设置为“en CA”:

var culture = CultureInfo.GetCultureInfo("en-CA");
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
            new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
然后,根据答案,在我的主windows构造函数中,我执行以下操作:

this.Language = XmlLanguage.GetLanguage("en-CA");
在listview中,我使用对象的DisplayString属性显示对象,该属性是:

return Start.ToString("dd MMM") // Start is a DateTime
listview定义为

<ListView x:Name="lvEntries" Margin="435,81,10,5" SelectionChanged="lvEntries_SelectionChanged" 
      SelectionMode="Single" MaxHeight="516" HorizontalAlignment="Left" Height="412" VerticalAlignment="Top" FontFamily="Consolas" >
<ListView.View>
    <GridView AllowsColumnReorder="False">
        <GridViewColumn Header="Period" DisplayMemberBinding="{Binding DisplayString}" />
        <GridViewColumn Header="Project" DisplayMemberBinding="{Binding ProjectName}" />
    </GridView>
</ListView.View></ListView>
我没有任何线程运行或代码触及其他地方的文化。我正在使用最新的实体框架来处理我的数据


我可以根据需要显示更多的代码,但我想不出任何其他相关的内容。

即使您没有显式地创建新线程,框架也可能在调用事件处理程序之前完成了创建

如果您使用的是.NET 4.5或更高版本,请尝试设置
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUiCulture

解释了这些新属性,但它们的名称是不言自明的


如果未设置这些属性,则新线程的区域性默认为操作系统的区域性。这也是一篇有趣的文章。

即使您没有显式地创建新线程,框架也可能在调用事件处理程序之前创建了新线程

如果您使用的是.NET 4.5或更高版本,请尝试设置
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUiCulture

解释了这些新属性,但它们的名称是不言自明的


如果未设置这些属性,则新线程的区域性默认为操作系统的区域性。也是一本有趣的读物。

您使用的是.NET 4.5还是更高版本?如果是,请尝试设置
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUiCulture
。解释了这些新属性。@Vache修复了它,谢谢。将其作为答案发布?您使用的是.NET 4.5还是更新版本?如果是,请尝试设置
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUiCulture
。解释了这些新属性。@Vache修复了它,谢谢。把它作为答案贴出来?
private void btnSave_Click(object sender, RoutedEventArgs e)
{
    String s = DateTime.Now.ToString("dd MMM"); // this returns the french abbreviation
    Save();
}