用代码使用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);
问题解决,睡觉!
我使用了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);
问题解决,睡觉!
相关文章推荐
- WPF 如何在代码中使用自定义的鼠标资源
- 「Unity」使用代码动态加载资源
- Style样式的四种使用(包括用C#代码动态加载资源文件并设置样式)
- 【WPF】XAML引入资源和在C#代码中动态添加样式
- WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
- 运行时使用代码动态的修改AspxGridView的列属性
- [WPF]静态资源(StaticResource)和动态资源(DynamicResource)
- WPF 纯代码生成界面(不使用XAML)
- Android 性能优化:使用 Lint 优化代码、去除多余资源
- WPF使用资源字典组织资源
- Developer Express V9.2中的 WPF Theme使用方法及资源名称总结
- .Net Client, WinForm or WPF内存使用控制的代码
- C#强化系列文章五:动态代码的使用(反射和动态生成类)
- 使用代理模式让应用程序使用动态java代码
- C#强化系列文章五:动态代码的使用(反射和动态生成类)
- uGUI使用代码动态添加Button.OnClick()事件
- WPF使用Path画圆的一个示例代码
- 使用JavaScript动态设置样式实现代码及演示动画
- Android在程序代码中使用String资源
- 动态库中使用对话框资源