15

MSDN 在事件设置器上说:

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

对此 SO question 的第一个答案证实了这一点,其中指出:

资源 xaml 不能有代码隐藏文件,它们通常称为“松散 xaml”。您可以在有关 EventSetter 的 msdn 中阅读相关内容。

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

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

我遇到了一个特殊的情况,它碰巧起作用了吗?

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

我的问题归结为:

MSDN 声明主题资源字典通常是松散的二进制 XAML 究竟是什么意思——在什么情况下多久一次?

4

1 回答 1

2

这意味着它是自行编译的,而不是在名称空间后面或名称空间内的代码。

或者换句话说,松散的 xaml 文件没有代码部分,它可以从数据库中作为文本读取,或者作为文本动态生成并在没有任何编码关联的情况下加载。

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

编辑:

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

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

于 2013-02-19T00:11:07.627 回答