【问题标题】:{0} is not valid for Setter.Value. The only supported MarkupExtension types are DynamicResourceExtension and BindingBase or derived types{0} 对 Setter.Value 无效。唯一支持的 MarkupExtension 类型是 DynamicResourceExtension 和 BindingBase 或派生类型
【发布时间】:2020-03-11 20:25:27
【问题描述】:

我遇到了一个 XAML 问题,在一个使用 vs2010 的项目中,我们使用自己的 CustomBinding 在我的 XAML 中使用 DynamicResource 时,设计师会抛出以下异常:

CustomBinding 对 Setter.Value 无效。唯一受支持的 MarkupExtension 类型是 DynamicResourceExtension 和 BindingBase 或派生类型。

即使它没有在该特定扩展中使用。

<SomeControl Value="{CustomBinding SomeValue} Style="{DynamicResource SomeStyle}"/>

Style="{DynamicResource SomeStyle}" 是抛出设计时异常的部分,因此永远不会设置样式。

如果有人遇到过类似的问题,请指教。

【问题讨论】:

  • 你的CustomBinding是从Binding类派生的吗?
  • 它源自 MarkupExtension
  • 是否可以安全地假设您缺少的报价 (Value="...) 在您的实际源代码控制中没有丢失?如果有,CustomBinding 的定义是什么?如果如您所说,它源自MarkupExtension,那么您的答案应该很明显:您必须从DynamicResourceExtensionBindingBase 派生,如错误消息所示。
  • true ,但是在使用 CustomBinding 的任何地方都没有应用 Style="{DynamicResource SomeStyle}" 时会出现错误
  • 我相信它是在抱怨错误的代码块——实际上是 SomeStyle 定义中的代码引发了问题。 -- 如果你打开设计器到那个特定的文件,你可能会得到智能感知帮助。 - 您可能在某处使用属性设置器,将值设置为 MarkupExtension 之类的东西 - 这不起作用,因为您正在为样式定义(而不是目标对象)指定值 - 对我来说似乎很愚蠢; 但不要对信使开枪——我没有设计 XAML!)。

标签: wpf xaml resources


【解决方案1】:

您的样式中使用的Setter.Value 仅支持某些硬编码类(StaticResource、DynamicResource 和 BindingBase),因为必须将值的提供推迟到应用样式时的时间,而且似乎他们没有足够的时间来正确实现它所以他们检查支持的类并在以后应用它们。

【讨论】:

  • 这太可悲了!
  • 它已经工作了一年多,现在我得到了这个愚蠢的错误,我的样式和预览不再工作了!有解决方案吗?仅仅返回this 是行不通的!
  • @DominicJonas 我认为他们改变了 .NET 3.5 和 4.0 之间的实现,所以有些事情的行为略有不同。然而,我解决了我的大部分问题。问一个问题,我可能会提供帮助。
  • 我已阅读 .Net Framework 源代码,从技术上讲,这对我来说毫无意义,为什么 Setter.Value 拒绝将自定义 MarkupExtensions 作为值提供者。我真的很想和编写这个程序的工程师谈谈。来源:referencesource.microsoft.com/#PresentationFramework/src/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多