用代码使用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);

问题解决,睡觉!

转载于:https://www.cnblogs.com/chenlhuaf/archive/2008/07/09/1238566.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值