WPF 多语言方案

SourceCode:

简介:
 
MSDN 推荐了一个WPF多语言方案--使用 Locbaml  ,是个半成品,而且也不够灵活.
 
此多语方案修改自:
 
该解决方案:
  • 使用WPF 扩展标记,运行时读取Resx Files内容.
  • Design Mode的设计时支持
  • 使用Weak Reference 缓存
 
因为项目需求,我拓展了该代码,增加了功能:
  • 加了个内容的Provider接口可使用Resx File和XML等提供多语言内容
  • 设计时错误提示
 
 
1.使用方式:
 
在XAML 中使用:以字符串和 图片为例:
 
<TextBlock Height="23" HorizontalAlignment="Left" Margin="98,24,0,0" Name="textBlock1"          
Text="{Resx Node={x:Static e:MainWindow.ThemeNode}, Key=lbltxt}"VerticalAlignment="Top"Width="199"/>
 
<Image Height="150" HorizontalAlignment="Left" Margin="98,87,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="251"      
Source="{Resx Node=WpfLocalizeTest.MainWindow, Key=flag}"/>
 
在代码中使用:
 
ResManager.Instance.GetResource(nodename, key);
 
 
 
Theme文件夹结构:
en-us 为theme名称. WpfLocalizeTest是程序集文件名,下面Resource.xml为 多语言资源文件
 

 
Resource.xml:
 
<?xml version="1.0" encoding="UTF-8"?>
<res>    
     <node name="MainWindow">
          <item key="lbltxt" type="string" des="这是注释" value="这是中文界面"/>        
           <item key="flag" type="image"  des="这是注释" value="flag.jpg"/>    
     </node>
</res>
 
 
Resx 为扩展标记,其中Node为人为约定  : WpfLocalizeTest.MainWindow
 
前半部分WpfLocalizeTest 是当前dll或exe 程序集文件名称.
后面部分 MainWinow是 xml结点名称(也可以没有,如果没有的话,item直接存放在res结点下.).
 
为方便,可以用类似 {x:Static e:MainWindow.ThemeNode}   ,具体看代码.
 
 
 
2.设计时支持:
  • 动态切换: 在Design 模式时,有个地球托盘图标,使用它可以切换theme,并在Design 时看到效果.
    (此处有个问题:需要写死设计时的路径.有没有更好的方法在设计时获取到文件路径?)
 
 
  • 错误提示: 如果在xml没有配置该相应的key.设计时Error窗口会提示报错:(示例中不存在MainWindow1 的node)

 
 
 

转载于:https://www.cnblogs.com/solo/archive/2012/02/06/2339636.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值