zoukankan      html  css  js  c++  java
  • 用代码使用WPF中的动态资源

          刚好公司在进行一个WPF的内部项目,今天我的任务是让整个应用支持多语言(全球化)。
          我使用了WPF中的资源文件来存放mutil language数据。
          resource文件如下:
    <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">
        
    <sys:String x:Key="AllNews">
            所有
        
    </sys:String>
        
    <sys:String x:Key="China">
            中国
        
    </sys:String>
        
    <sys:String x:Key="World">
            世界
        
    </sys:String>
        
    <sys:String x:Key="News">
            新闻
        
    </sys:String>
        
    <sys:String x:Key="Other">
            其他
        
    </sys:String>
    </ResourceDictionary>
          对于各个业务组件的全球化十分简单,如
    <Button Height="23" Name="btnChina" Width="75" Click="Button_Click" Content="{DynamicResource China}">
          但是对于主窗体来说,菜单是要通过读取各个业务组件的CustomAttribute来创建的。起初,我用的方法是直接从应用程序的资源里找到对应的串。
    (string)Application.Current.Resources.MergedDictionaries[0][key]
          但是问题随之而来,当我切换language resource文件时,菜单上的内容并不会自动更新。既然WPF都用了DataBinding功能,总不能还用代码去更新菜单项吧。这违背了我们程序员的原则!
          查阅了相关书籍,终于找到了解决的方案,使用UIElement对象的SetResourceReference方法来实现{DynamicResource XXXX}的功能:
    item = new MenuItem();
    item.SetResourceReference(MenuItem.HeaderProperty, key);
    this.menuMain.Items.Add(item);

    问题解决,睡觉!

  • 相关阅读:
    mysql基础之日志管理(查询日志、慢查询日志、错误日志、二进制日志、中继日志、事务日志)
    jQuery1.9.1针对checkbox的调整
    管理 sendmail 的邮件队列
    将以管理员方式运行cmd运行方式放到win7任务栏
    转 git操作小结
    [转]前端CSS规范整理
    jQuery 1.9不支持$.browser 怎么判断浏览器类型和版本
    js闭包陷阱问题
    关于NGINX下开启PHP-FPM 输出PHP错误日志的设置(已解决)
    PHP中cURL错误号对照[转]
  • 原文地址:https://www.cnblogs.com/chenlhuaf/p/1238566.html
Copyright © 2011-2022 走看看