事件设置器不能用于主题资源字典中包含的样式。这是因为主题资源字典在运行时通常是松散的二进制 XAML (BAML) 文件,并且没有定义任何范围,其中定义处理程序的随附代码隐藏可以存在。
对此 SO question 的第一个答案证实了这一点,其中指出:
资源 xaml 不能有代码隐藏文件,它们通常称为“松散 xaml”。您可以在有关 EventSetter 的 msdn 中阅读相关内容。
但是,我还不了解事件设置器的限制。我尝试使用资源字典的代码隐藏文件。我已经为包含在模板中的控件的事件分配了一个事件处理程序,该模板在所述资源字典的样式中定义 - 它起作用了。
另一方面,将事件设置器添加到同一资源字典中的样式会导致异常。
我遇到了一个特殊的情况,它碰巧起作用了吗?
或者在模板中设置事件处理程序总是有效,但如果是这样,那么为什么我不能在同一资源字典中的样式中使用事件设置器?
我的问题归结为:
MSDN 声明主题资源字典通常是松散的二进制 XAML 究竟是什么意思——在什么情况下多久一次?