Theme ResourceDictionary中的EventSetters

O. *_*per 15 wpf styles resourcedictionary eventsetter

MSDN对活动制定者说:

事件设置器不能用于主题资源字典中包含的样式.这是因为运行时的主题资源字典通常是松散的二进制XAML(BAML)文件,并且没有定义任何范围,其中定义处理程序的后续代码隐藏可以存在.

这个SO问题的第一个答案证实了这一点,该问题指出:

资源xaml不能有文件后面的代码,它们通常被称为"松散的xaml".您可以在msdn中了解有关EventSetter的内容.

但是,我还不了解事件设定者的限制.我尝试使用代码隐藏文件作为资源字典.我为在所述资源字典中的样式中定义的模板中包含的控件事件分配了一个事件处理程序 - 并且它起作用.

另一方面,将事件设置器添加到同一资源字典中的样式会导致异常.

我是否遇到了碰巧工作的特殊情况?

或者在模板中设置事件处理程序始终有效,但如果是这样,那么为什么我不能在同一资源字典中的样式中使用事件设置器?

我的问题归结为:

MSDN声明主题资源字典通常是松散的二进制XAML 究竟是什么意思- 在什么情况下究竟是什么时候?

McD*_*ean 2

这意味着它是单独编译的,而不是使用隐藏在命名空间内或命名空间内的代码。

或者换句话说,松散的 xaml 文件没有代码部分,它可以从数据库中作为文本读取,或者作为文本即时生成并加载,而无需任何编码关联。

至于天气,这是否是一个正当的理由。这取决于每个开发人员,但这就是松散的 xaml 的含义。

编辑:

为了回应您的评论,我想他们特别指的是资源和样式,因为这些是最常见的“松散文件”,并且一般来说大多数人不会用代码文件支持它们。我个人认为这是一种应对之策。他们可以轻松添加 Loose=True 属性并解决此问题。

实际上,问题不在于松散文件的数量或使用它们的频率,而在于制定规则来补偿缺失的功能。如果他们只是说你不能做 x,y,z,因为我们还没有建立对它的支持,而不是说这是因为一些任意数量的松散 xaml 文件,那就容易多了。