【发布时间】:2025-12-26 00:10:11
【问题描述】:
我正在学习界面本地化并在 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");
}
}
}
【问题讨论】:
标签: c# wpf resx buttonclick