在单击事件中更改C#代码中的资源文件
我正在学习界面本地化,并在VisualStudio2008中使用WPF。我的程序的目标是使用户可以单击按钮并更改窗口中显示的语言。当用户单击按钮时,我一直试图在运行时更改代码隐藏部分中的资源文件 我已看完这个问题: 然而,这对我来说似乎不是一个解决方案,因为我想在按钮点击事件中进行上述更改。当我尝试这样做时,似乎无法使用此解决方案,因为来自其他问题的受保护函数无法进入操作事件内部 根据前面的问题,以下是我在没有运气的情况下尝试的内容:在单击事件中更改C#代码中的资源文件,c#,wpf,resx,buttonclick,C#,Wpf,Resx,Buttonclick,我正在学习界面本地化,并在VisualStudio2008中使用WPF。我的程序的目标是使用户可以单击按钮并更改窗口中显示的语言。当用户单击按钮时,我一直试图在运行时更改代码隐藏部分中的资源文件 我已看完这个问题: 然而,这对我来说似乎不是一个解决方案,因为我想在按钮点击事件中进行上述更改。当我尝试这样做时,似乎无法使用此解决方案,因为来自其他问题的受保护函数无法进入操作事件内部 根据前面的问题,以下是我在没有运气的情况下尝试的内容: /// Change to English-US
/// 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还不熟悉,这正是我现在正在从事的工作。据我所知,函数中不能有函数,就像我在代码中所做的那样。我把它放在那里的唯一原因是我需要它来处理button click事件
在此方面的帮助将不胜感激
以下是新代码:
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");
}
}
}
名称空间本地化概念
{
///
///Window1.xaml的交互逻辑
///
公共部分类Window1:Window
{
公共窗口1()
{
Properties.Resources.Culture=new CultureInfo(ConfigurationManager.AppSettings[“Culture”]);
///初始化组件();
}
///退出按钮
私有无效按钮1\u单击(对象发送者,路由目标)
{
系统环境退出(0);
}
私有void changecurity(字符串cultureKey)
{
尝试
{
System.Threading.Thread.CurrentThread.CurrentUICulture=新的CultureInfo(cultureKey);
}
捕获(异常错误)
{
系统环境退出(0);
}
}
私有无效按钮2\u单击(对象发送者,路由目标)
{
改变文化(“美国”);
}
私有无效按钮3\u单击(对象发送者,路由目标)
{
改变文化(“德”);
}
}
}
说到本地化和gloablization,WPF似乎不支持Winforms的相同功能。尽管我发现了一些有趣的文章,这些文章一步一步地展示了如何在运行时替换语言,但仍然是动态的
- :
- 它提供了在运行时动态替换语言的选项
- 它的性能比基于XPath的蹩脚XML绑定解决方案要好
- 它可以通过样式、控制模板和数据模板使用
- 它使用默认和自定义格式化程序,用参数转换格式化文本
- 它提供了一个翻译自定义标记扩展来编写优雅的XAML
-
- 运行时切换区域性-自动更新所有本地化元素
- 使用可以在Visual Studio中维护的现有资源文件结构(*.resx文件)
- 保持对Expression Blend(以及其他XAML设计应用程序)中工作的本地化元素的设计时支持
private void ChangeCulture(string cultureKey)
{
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey);
}
catch (Exception err)
{
// That culture probably doesn't exist
}
}
private void ButtonA_Click(object sender, EventArgs args)
{
ChangeCulture("en-US");
}
private void ButtonB_Click(object sender, EventArgs args)
{
ChangeCulture("de-DE");
}
编辑:
它被授予+100赏金,所以我认为这是一个伟大的解决方案。查看。我完全删除了以前的按钮点击事件,并将其输入。编译器没有问题,但单击按钮时语言不会更改。我将发布新代码-可能还需要注意的是,我有一个app.config文件,在运行该程序之前,我一直在使用该文件更改语言。我刚刚添加了一个类似帖子的链接,该帖子对此有一个很好的答案,尽管有点复杂。我正在尝试将界面中的所有文本本地化。按钮、文本框和选项卡项上都有文本。这种联系对那些人也有效吗?我问这个问题的唯一原因是,作为示例,他们总是将字符串编码到XAML窗口中。