您的位置:首页 > 编程语言

用代码使用WPF中的动态资源

2008-07-09 00:54 309 查看
刚好公司在进行一个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);

问题解决,睡觉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: