【问题标题】:EventSetters in Theme ResourceDictionaryTheme ResourceDictionary 中的 EventSetters
【发布时间】:2012-12-03 19:59:00
【问题描述】:

MSDN says on event setters:

事件设置器不能用于主题资源字典中包含的样式。这是因为运行时的主题资源字典通常是松散的二进制 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


【解决方案1】:

这意味着它是独立编译的,而不是在命名空间后面或内部的代码。

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

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

编辑:

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

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

【讨论】:

  • 抱歉,问题可能不清楚 - 我知道 loose XAML 是什么意思。我的问题是关于经常这个词;在引用的上下文中经常是什么意思?换句话说,具体是什么时候?
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 2014-07-31
  • 2012-10-26
相关资源
最近更新 更多