c# - 什么时候 x :Static type converters evaluated: runtime or compile time?

标签 c# wpf markup-extensions

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

我不会使用 .res 文件,因为在我的公司已经有一个解决方案可以创建一个包含所有字符串的加密映射,并且它需要 int 键来引用每个字符串。所以我编写了一个自定义生成器,它创建一个包含所有“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,则可以在运行时考虑它。

关于c# - 什么时候 x :Static type converters evaluated: runtime or compile time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5637680/

相关文章:

c# - 如何在 ASP.NET 中重写我的 URL?

c# - 为什么私有(private)成员变量可以被类实例改变?

c# - WPF 双向绑定(bind)到静态类属性

c# - 不可捕获的异常

c# - 继承或标识符

c# - 通过将函数名称作为字符串传递来动态调用任何函数

wpf - 多个窗口,还有任务栏上的多个项目

c# - EntityFramework 在给定时间保存数据库的 "frozen image"

wpf - 如何调试 Visual Studio 2012 实例设计时

xaml - 静态资源到标记扩展