本文将讨论在WPF中一种较为方便的本地化方法。
由于在项目中要实现本地化,所以我在网上查找相关的解决方案。通过一系列调研,发现实现本地化的方法主要有以下三种:
通过编译项目以设置 x:Uid 并使用 LocBaml 工具实现;
通过 DynamicResource 实现;
通过 Resx 文件实现
其中第一种是官方介绍的方法,考虑到实现步骤略为复杂,所以直接忽略;
第二种方式的实现,主要是在程序中添加 Resource Dictionary 类型的文件,并在其中放入本地化资源字符串;在 XAML 代码中,直接使用 {DynamicResource XXXX} 来实现;这种方法比较方便,不过它也有两个缺点:
在 XAML 中,引用 DynamicResource 的属性必须为依赖属性,否则会出错;
在 C# 代码中引用稍微有点麻烦,需要从 Resource Dictionary 中获取并转化为字符串
其中第一点可以说是致命缺点,我曾在项目中添加了一个第三方控件,其 Header 属性并不是依赖属性,所以不能使用这种方式;不是依赖属性,当然,也就更不能使用绑定(Binding)来设置了。