首页 文章

Theme ResourceDictionary中的EventSetters

提问于
浏览
15

MSDN says on event setters:

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

这由the first answer to this SO question确认,其中指出:

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

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

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

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

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

我的问题归结为:

What exactly is meant by MSDN's statement that a theme resource dictionary is often loose binary XAML - how often, under what circumstances exactly?

1 回答

  • 2

    这意味着它自己编译而不是在命名空间后面或在命名空间内 .

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

    天气是否合理 . 这取决于每个开发人员,但这就是松散的xaml意味着什么 .

    编辑:

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

    实际上,问题不在于松散文件的数量或使用它们的频率,而是与规则是为了补偿缺失的特征这一事实有关 . 如果他们只是说你不能做x,y,z会更容易,因为我们没有 Build 对它的支持,而不是说它是因为一些任意数量的松散xaml文件 .

相关问题