【问题标题】:When are x:Static type converters evaluated: runtime or compile time?何时评估 x:Static 类型转换器:运行时还是编译时?
【发布时间】: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 documentationtype converters documentation 之后,我想到了以下问题:

“已编译的 xaml”(baml) 是否在运行时或编译时实际评估每种类型(通过 x:Static)?

我问这个是因为我静态引用枚举值的原因之一是我没有确切的枚举字符串键,而是它的值,这会使应用程序有点黑客攻击更难。

如果解析是在运行时完成的,那么我可以将之前的代码缩小到:

<Label Content="{l:Translator MainWindow_WelcomeMessage}" />

这需要我自己查找枚举值,但这是单行的:

TranslatedEnums result;
Enum.TryParse(key, out result);

这会使 Xaml 代码更小(这很好),但如果密钥不存在,它会在编译时失败(这不是问题)。

【问题讨论】:

    标签: c# wpf markup-extensions


    【解决方案1】:

    它实际上是在 xaml 加载时(如 here 所述)。如果你只加载你的 xaml onece,你可以在运行时考虑它。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 2013-09-17
      • 2011-02-06
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2012-09-24
      • 2011-09-27
      相关资源
      最近更新 更多