zoukankan      html  css  js  c++  java
  • 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)

     
     
     
  • 相关阅读:
    django大全
    centos 下安装python3.6.2
    爬虫基础知识与简单爬虫实现
    HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)
    ZOJ5833 Tournament(递归打表)
    ZOJ4067 Books(贪心)
    ZOJ4062 Plants vs. Zombies(二分+贪心)
    ZOJ4060 Flippy Sequence(思维题)
    洛谷P2568 GCD(线性筛法)
    2018.11.6刷题记录
  • 原文地址:https://www.cnblogs.com/solo/p/2339636.html
Copyright © 2011-2022 走看看