Когда оцениваются преобразователи типа x: Static: время выполнения или время компиляции? - PullRequest
3 голосов
/ 12 апреля 2011

У меня есть приложение wpf, и я начинаю его локализовать.Стратегия локализации, которую я выбрал, состояла в том, чтобы создать свой собственный класс MarkupExtension.

Я не буду использовать файлы .res, поскольку в моей компании уже существует решение, которое создает зашифрованную карту со всемистроки, и это требует, чтобы ключи int ссылались на каждую строку.Поэтому я написал собственный генератор, который создает перечисление со всеми ключами 'int' (это может быть статический класс с целочисленными значениями, это не имеет значения).

Поэтому я хочу сослаться на каждое из этих перечисленийключи в моих файлах XAML:

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

Созданное перечисление равно TranslatedEnums, и мой класс переводчика называется Translator (dhu).

Но после прочтения x: Static Документация и документация для преобразователей типов , мне пришёл в голову следующий вопрос:

Оценивает ли "compiled xaml" (baml) каждый из этихтипы (через x: Static) во время выполнения или во время компиляции?

Я спрашиваю об этом, потому что одна из причин, по которой я статически ссылаюсь на значение перечисления, заключается в том, что у меня нетточный строковый ключ enum, а точнее его значение, которое усложнит взлом приложения.

Если разрешение выполняется во время выполнения, я мог бы сузить свой предыдущий код до:

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

Что потребует поиска для перечислениязначение мое, но это однострочный:

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

, который уменьшит код Xaml (что хорошо), но потерпит неудачу во время компиляции, если ключ не существует(что не проблема).

1 Ответ

2 голосов
/ 12 апреля 2011

Это на самом деле во время загрузки xaml (как указано здесь ).если вы загружаете только свой xaml onece, вы можете рассмотреть его во время выполнения.

...