我有一个 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 代码更小(这很好),但如果 key 不存在,它会在编译时失败(这不是问题)。
最佳答案
它实际上是在 xaml 加载时(如 here 所述)。如果你只加载你的 xaml onece,你可以在运行时考虑它。
关于c# - x :Static type converters evaluated: runtime or compile time? 是什么时候,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5637680/