【发布时间】:2011-04-12 23:33:59
【问题描述】:
我有一个 wpf 应用程序,我开始对其进行本地化。我选择的本地化策略是创建我的自定义 MarkupExtension 类。
我不会使用 .res 文件,因为在我的公司已经制定了一个解决方案,它创建了一个包含所有字符串的加密映射,并且它需要 int 键来引用每个字符串。所以我编写了一个自定义生成器,它使用所有“int”键创建一个枚举(可能是一个带整数的静态类,这并不重要)。
所以我想在我的 XAML 文件中引用这些枚举键中的每一个,这样做:
<Label Content="{l:Translator {x:Static l:TranslatedEnums.MainWindow_WelcomeMessage}}" />
创建的枚举是TranslatedEnums,我的翻译类叫做Translator (dhu)。
但是在阅读了 x:Static documentation 和 type converters documentation 之后,我想到了以下问题:
“已编译的 xaml”(baml) 是否在运行时或编译时实际评估每种类型(通过 x:Static)?
我问这个是因为我静态引用枚举值的原因之一是我没有确切的枚举字符串键,而是它的值,这会使应用程序有点黑客攻击更难。
如果解析是在运行时完成的,那么我可以将之前的代码缩小到:
<Label Content="{l:Translator MainWindow_WelcomeMessage}" />
这需要我自己查找枚举值,但这是单行的:
TranslatedEnums result;
Enum.TryParse(key, out result);
这会使 Xaml 代码更小(这很好),但如果密钥不存在,它会在编译时失败(这不是问题)。
【问题讨论】:
标签: c# wpf markup-extensions