C# 如何改变文化?

C# 如何改变文化?,c#,wpf,C#,Wpf,我正在尝试通过单击按钮更改语言,代码如下: private void Spache_Click(object sender, RoutedEventArgs e) { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR"); System.Threading.Thread.CurrentThread.CurrentUICulture

我正在尝试通过单击按钮更改语言,代码如下:

private void Spache_Click(object sender, RoutedEventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");

    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");          
}

我的应用程序有一些资源文件:
Resources.ar-TN.resx
Resources.fr-fr.resx
等。。。我需要用按钮切换语言。它在主屏幕中工作,但在按钮中不工作。

在另一个主题中有一个类似的问题,请检查它是否正确


实际问题应该是:

更改UI区域性后如何重新加载UI

影响UI的属性是
Thread.CurrentThread.CurrentUICulture
,而不是
Thread.CurrentThread.CurrentCulture
。第二个区域性影响字符串的解析或格式化方式
CurrentUICulture
是用于加载本地化资源的区域性

更改
CurrentUICulture
不会重新加载这些资源。您必须显式强制重新加载或重新加载应用程序的主窗口

支票,由Pluralsight课程的作者撰写。该课程以WPF应用程序为例,所以一定要仔细阅读。通过微软的(免费)服务,您可以免费获得3个月的Pluralsight课程

本文展示的是如何显式处理主窗口,并在区域性更改时重新加载它

App.xaml
已修改,以防止主窗口自动打开。StartupUri将从
App.xaml中删除,并处理
OnStartup`事件以显式打开主窗口。这:

<Application x:Class="WpfLocalized.App"
             ...
             StartupUri="MainWindow.xaml">
...
</Application>
OnStartup
方法第一次加载主窗口<代码>更改区域性更改区域性,关闭当前窗口并再次加载,从而重新加载所有资源

要更改区域性并重新加载,只需通过单击按钮调用
App.ChangeCulture
eg即可:

    private void AUButton_Click(object sender, RoutedEventArgs e)
    {
        App.ChangeCulture(new CultureInfo("en-AU"));

    }
本文的示例有一个文本框,其值从参考资料中加载,还有一些更改区域性的按钮:

    <TextBlock
            Text="{x:Static resx:Resources.Greeting}"
            HorizontalAlignment="Center" Padding="10,5"
            Margin="5"/>


每次加载窗口时,将根据当前UICulture从正确的文件加载资源

您只能在应用程序中设置一次。如果要更改它,您必须关闭它并重新启动应用程序。您需要重新加载UI。文化变迁并不是到处传播的。最安全的方法是重启应用程序。但如何重启呢?我是个初学者。帮帮我…@野蛮人,别胡乱尝试。本地化是WPF的完整文档,有很多教程、课程和操作方法<代码>当前区域性不影响加载的资源。更改CurrentUICulture不会强制窗体重新加载自身。这应该是一条注释。它没有回答这个问题。这个问题是关于完全不同的东西的问题是关于改变应用程序的文化,不是吗?不管怎样,谢谢不,不是。这是关于一个特定的解析错误。答案与OP使用的代码相同。它们没有显示如何重新加载文件resources@Barbarous你为什么要这么做?WPF将根据用户的区域性自动显示正确的资源。@PanagiotisKanavos我想用应用程序中的按钮更改语言
    private void AUButton_Click(object sender, RoutedEventArgs e)
    {
        App.ChangeCulture(new CultureInfo("en-AU"));

    }
    <TextBlock
            Text="{x:Static resx:Resources.Greeting}"
            HorizontalAlignment="Center" Padding="10,5"
            Margin="5"/>