EventSetters в теме ResourceDictionary

MSDN говорит о настройках событий:

Настройщики событий не могут использоваться в стиле, который содержится в словаре ресурсов темы. Это связано с тем, что словарь ресурса темы во время выполнения часто является свободным двоичным файлом XAML (BAML) и не имеет какой-либо области определения, где может существовать сопроводительный код, который определяет, что обработчики могут существовать.

Это подтверждается первым ответом на этот вопрос SO, который гласит:

ресурс xaml не может иметь код за файлом, его обычно называют "свободным xaml". Вы можете прочитать об этом в msdn о EventSetter.

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

Добавление объекта события в стиль в том же словаре ресурсов, с другой стороны, приводит к исключению.

Я попал в специальный случай, когда он работает?

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

Мой вопрос сводится к:

Что именно подразумевается под выражением MSDN, что словарь ресурса темы часто является свободным двоичным XAML - как часто, при каких обстоятельствах точно?

Ответы

Ответ 1

Это означает, что он скомпилирован сам по себе не с кодом за или внутри пространства имен.

Или, говоря иначе, нет части кода для свободного файла xaml, его можно было бы считывать из базы данных в виде текста, например, или генерировать "на лету" как текст и загружать без какой-либо кодифицированной ассоциации.

Что касается погоды, это действительная причина или нет. Это касается каждого разработчика, но это то, что означает свободный xaml.

Edit:

В ответ на ваш комментарий, я бы предположил, что они конкретно ссылаются на ресурсы и стили, поскольку они являются наиболее распространенными "свободными файлами", и в большинстве случаев большинство людей не поддерживают их с помощью файла кода. Лично я рассматриваю его как решение. Они могли бы легко добавить атрибут Loose = True и решить эту проблему.

Реально проблема заключается не в объеме свободных файлов, а в частоте, с которой они используются, это связано с тем, что было принято правило для компенсации недостающей функции. Было бы намного проще, если бы они просто сказали, что вы не можете делать x, y, z, потому что у нас нет поддержки для него, вместо того, чтобы сказать, что это из-за некоторого количества свободных xaml файлов.