事件设置器不能用于包含在主题资源字典中的样式中。这是因为运行时的主题资源字典通常是松散的二进制XAML(BAML)文件,并没有任何范围定义,其中附带的代码后备可以存在。
这得到了此SO问题的第一个答案的证实,该回答指出:
资源xaml不能有一个代码后备文件,它们通常被称为“松散的xaml”。您可以在EventSetter的msdn上阅读有关此问题的信息。
然而,我仍然不明白事件设置器的限制。我已经尝试在资源字典中使用代码后备文件。我为在样式中定义的模板中包含的控件的事件分配了一个事件处理程序 - 并且它起作用了。
在同一资源字典中的样式中添加事件设置器却会导致异常。
我是否遇到了一个特殊情况,使它偶然工作?
或者说,在模板中设置事件处理程序总是有效的,但如果是这样,为什么不能在同一资源字典中的样式中使用事件设置器呢?
我的问题归结为:
MSDN关于主题资源字典通常是松散二进制XAML - 在什么情况下经常发生,具体含义是什么?