常见的有四种方案:1.资源字典2.资源文件、
我用的是资源字典。
1.做两个语言资源,如下:
(1)中文资源AppResource_zh_CN.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <!--登录页Start--> <sys:String x:Key="lblSignTitle">欢迎登录</sys:String> <sys:String x:Key="lblUserNumber">账号</sys:String> <sys:String x:Key="lblUserPwd">密码</sys:String> <sys:String x:Key="chkRemUserName">记住账户</sys:String> <sys:String x:Key="btnSignIn">登录</sys:String> <sys:String x:Key="btnGuestSign">游客登录</sys:String> <sys:String x:Key="Locked">对不起,该账号已锁定,请联系管理员!</sys:String> <sys:String x:Key="NoPass">用户名或密码错误!</sys:String> <!--登录页End--> <!--主页Start--> <sys:String x:Key="txtSearchBox">搜索</sys:String> <sys:String x:Key="btnMainPage">主页</sys:String> <sys:String x:Key="btnMainPageTag">系统主页</sys:String> <sys:String x:Key="txtBarkBg">深色主题</sys:String> <sys:String x:Key="lblUStars1">登录</sys:String> <sys:String x:Key="lblUStars2">个人信息</sys:String> <sys:String x:Key="lblLogout">注销</sys:String> <sys:String x:Key="lblMainTitle">B2P主控中心</sys:String> <sys:String x:Key="helpBtn">帮助中心</sys:String> <sys:String x:Key="minBtn">最小化</sys:String> <sys:String x:Key="changeBtn">最大化</sys:String> <sys:String x:Key="closeBtn">退出</sys:String> <sys:String x:Key="msgSignIn">小主登录成功!~</sys:String> <sys:String x:Key="msgSignOut">小主取消了登录!~</sys:String> <sys:String x:Key="NoPermission">操作禁止(。・`ω´・)您需要更高权限!~</sys:String> <sys:String x:Key="UnknownUrl">按钮链接地址未知!</sys:String> <!--主页End--> </ResourceDictionary>
(2)英文资源AppResource_en_US.xaml,key的个数和名字与中文资源一致,修改key对应的值为英文(这里的例子用中文+En代替了)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib"> <!--登录页Start--> <sys:String x:Key="lblSignTitle">欢迎登录En</sys:String> <sys:String x:Key="lblUserNumber">账号En</sys:String> <sys:String x:Key="lblUserPwd">密码En</sys:String> <sys:String x:Key="chkRemUserName">记住账户En</sys:String> <sys:String x:Key="btnSignIn">登录En</sys:String> <sys:String x:Key="btnGuestSign">游客登录En</sys:String> <sys:String x:Key="Locked">对不起,该账号已锁定,请联系管理员!En</sys:String> <sys:String x:Key="NoPass">用户名或密码错误!En</sys:String> <!--登录页End--> <!--主页Start--> <sys:String x:Key="txtSearchBox">搜索En</sys:String> <sys:String x:Key="btnMainPage">主页En</sys:String> <sys:String x:Key="btnMainPageTag">系统主页En</sys:String> <sys:String x:Key="txtBarkBg">深色主题En</sys:String> <sys:String x:Key="lblUStars1">登录En</sys:String> <sys:String x:Key="lblUStars2">个人信息En</sys:String> <sys:String x:Key="lblLogout">注销En</sys:String> <sys:String x:Key="lblMainTitle">B2P主控中心En</sys:String> <sys:String x:Key="helpBtn">帮助中心En</sys:String> <sys:String x:Key="minBtn">最小化En</sys:String> <sys:String x:Key="changeBtn">最大化En</sys:String> <sys:String x:Key="closeBtn">退出En</sys:String> <sys:String x:Key="msgSignIn">小主登录成功!~En</sys:String> <sys:String x:Key="msgSignOut">小主取消了登录!~En</sys:String> <sys:String x:Key="NoPermission">操作禁止(。・`ω´・)您需要更高权限!~En</sys:String> <sys:String x:Key="UnknownUrl">按钮链接地址未知!En</sys:String> <!--主页End--> </ResourceDictionary>
2.App.xaml添加语言字典资源(添加一个默认的就行,用于项目加载时用)
1 <Application.Resources> 2 <ResourceDictionary> 3 <ResourceDictionary.MergedDictionaries> 4 <ResourceDictionary x:Name="Language" Source="/HOST_CONTROL_CENTER_APP;component/Dictionarys/AppResource_zh_CN.xaml"/> 5 </ResourceDictionary.MergedDictionaries> 6 </ResourceDictionary> 7 </Application.Resources>
3.在WPF窗口或者控件xaml代码中调用:
把原来中文值改成{DynamicResource key}就行了,如下:
<Button Content="主页" x:Name="MainShow" Tag="{DynamicResource btnMainPageTag}" Width="200" Visibility="Visible" Click="BtnPage_Click"/>
改为:
<Button Content="{DynamicResource btnMainPage}" x:Name="MainShow" Tag="{DynamicResource btnMainPageTag}" Width="200" Visibility="Visible" Click="BtnPage_Click"/>
4.创建切换语言的菜单(ComboBox控件):
后台代码:
/// <summary> /// 改变语言 /// </summary> private void CmbLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.RemovedItems.Count > 0) // 注掉这一行看看会发生什么 { string Culture= "/HOST_CONTROL_CENTER_APP;component/Dictionarys/AppResource_{0}.xaml"; if (e.AddedItems[1].ToString() == "简体中文") { Culture = string.Format(Culture, "zh_CN"); } else if ( e.AddedItems[1].ToString() == "English") { Culture = string.Format(Culture, "en_US"); } List<string> ll = new List<string>(); foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries) { if (dictionary.Source != null && dictionary.Source.OriginalString.Contains("AppResource")) { bool b = Application.Current.Resources.MergedDictionaries.Remove(dictionary); dictionary.Source =new Uri(Culture, UriKind.RelativeOrAbsolute); Application.Current.Resources.MergedDictionaries.Add(dictionary); break; } } } }
注:不成功记得把字典资源文件的属性改成“始终复制”。