【发布时间】:2012-12-03 19:59:00
【问题描述】:
事件设置器不能用于主题资源字典中包含的样式。这是因为运行时的主题资源字典通常是松散的二进制 XAML (BAML) 文件,并且没有定义任何范围,其中定义了处理程序的随附代码隐藏可以存在。
the first answer to this SO question 确认了这一点,其中指出:
资源 xaml 不能有代码隐藏文件,它们通常被称为“松散 xaml”。您可以在 msdn 中了解有关 EventSetter 的内容。
但是,我还不了解事件设置器的限制。我尝试使用资源字典的代码隐藏文件。我已经为在所述资源字典的样式中定义的模板中包含的控件的事件分配了一个事件处理程序 - 它起作用了。
另一方面,将事件设置器添加到同一资源字典中的样式会导致异常。
我是否遇到了一个特殊情况,它恰好起作用?
或者在模板中设置事件处理程序总是有效,但如果是这样,那为什么我不能在同一资源字典中的样式中使用事件设置器?
我的问题归结为:
MSDN 声明主题资源字典通常是松散的二进制 XAML 究竟是什么意思?在什么情况下,多久一次?
【问题讨论】:
-
您是否将代码隐藏用于主题资源字典?
-
@voroninp:是的;参看。带有“我已经尝试使用资源字典的代码隐藏文件”语句的段落。
-
ResourceDictionary 可以有代码隐藏。这种方法在 MacDonald 的书 - C# 2010 中的 Pro WPF 中有所描述。我认为禁用样式事件设置器只是设计使然。但我同意你的看法,原因不明。
-
如果是这样,那您可以简单地创建一个模板,然后在主题中引用它吗?抱歉,如果您不需要解决方案而只是想了解一下。我放弃了在 MFC 中了解 Microsoft,现在只是努力让它发挥作用。
标签: wpf styles resourcedictionary eventsetter