事件设置器不能用于主题资源字典中包含的样式。这是因为运行时的主题资源字典通常是松散的二进制XAML(BAML)文件,并且没有定义任何范围,其中可以存在定义处理程序的后续代码隐藏。
这由the first answer to this SO question确认,其中声明:
资源xaml不能有代码隐藏文件,它们通常称为“松散的xaml”。您可以在msdn中了解有关EventSetter的内容。
但是,我还不了解事件设定者的限制。我尝试使用代码隐藏文件作为资源字典。我为在所述资源字典中的样式中定义的模板中包含的控件事件分配了一个事件处理程序 - 并且它有效。
另一方面,将事件设置器添加到同一资源字典中的样式会导致异常。
我是否遇到过碰巧工作的特殊情况?
或者在模板中设置事件处理程序总是有效,但如果是这样,那么为什么我不能在同一资源字典中的样式中使用事件设置器?
我的问题归结为:
MSDN声明主题资源字典经常松散二进制XAML的确切含义 - 在什么情况下经常发生什么?
答案 0 :(得分:2)
这意味着它是独立编译的,而不是在命名空间后面或代码内的代码。
或者换句话说,松散的xaml文件没有代码部分,它可以作为文本从数据库读入,或者作为文本动态生成并加载而没有任何编码关联。
天气是否合理。这取决于每个开发人员,但这就是松散的xaml意味着什么。
编辑:
在回复你的评论时,我认为他们特指的是资源和样式,因为这些是最常见的“松散文件”,一般来说大多数人都不会用代码文件来支持它们。我个人认为这是一个应对。他们可以轻松添加一个Loose = True属性并解决了这个问题。
实际上,问题不在于松散文件的数量或使用它们的频率,而是与规则是为了补偿缺失的特征这一事实有关。如果他们只是说你不能做x,y,z会更容易,因为我们没有建立对它的支持,而不是说它是因为一些任意数量的松散xaml文件。