我正在学习界面本地化并在 Visual Studio 2008 中使用 WPF。我的程序的目标是让用户可以单击按钮并更改窗口中显示的语言。当用户单击按钮时,我一直在尝试在代码隐藏部分的运行时更改我的资源文件。
我已经阅读了这个问题:Programmatically change resource file language (resx) in Code Behind
但是,这似乎不是我的解决方案,因为我想对按钮单击事件进行上述更改。当我尝试这样做时,似乎我无法使用此解决方案,因为来自其他问题的受保护函数无法进入动作事件中。
根据上一个问题,这是我没有运气的尝试:
/// Change to English-US
private void Button2_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
}
}
/// Change to German
private void Button3_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
}
}
我已经在学校和自己编程了几年了,所以我不是一个绝对的菜鸟。但是,我是 C# 和 WPF 的新手,这就是我现在正在使用的。据我所知,你不能在一个函数中拥有一个函数,就像我在我的代码中那样。我把它放在那里的唯一原因是因为我需要它来处理按钮单击事件。
对此的帮助将不胜感激。
这是新代码:
namespace LocalizationConcept
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
Properties.Resources.Culture = new CultureInfo(ConfigurationManager.AppSettings["Culture"]);
///InitializeComponent();
}
/// Exit Button
private void button1_Click(object sender, RoutedEventArgs e)
{
System.Environment.Exit(0);
}
private void ChangeCulture(string cultureKey)
{
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey);
}
catch (Exception err)
{
System.Environment.Exit(0);
}
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("en-US");
}
private void Button3_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("de-DE");
}
}
}