我有一个 wpf 应用程序,我开始对其进行本地化。我选择的本地化策略是创建我的自定义 MarkupExtension 类。

我不会使用 .res 文件,因为在我的公司已经有一个解决方案,它创建一个包含所有字符串的加密映射,它需要 int 键来引用每个字符串。所以我写了一个自定义生成器,它创建一个包含所有“int”键的枚举(可能是一个带有整数的静态类,它并不重要)。

所以我想在我的 XAML 文件中引用这些枚举键中的每一个,这样做:

<Label Content="{l:Translator {x:Static l:TranslatedEnums.MainWindow_WelcomeMessage}}" />

创建的枚举是 TranslatedEnums,我的翻译器类称为 Translator (dhu)。

但是在阅读了 x:Static documentationtype 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/

10-17 01:57