wpf - 子类 ResourceDictionary 的 XAML 设计器错误“对象与目标类型不匹配”
问题描述
我继承自ResourceDictionary
以添加一些自定义属性来支持蒙皮。一切都能正常编译和运行,但 VS2017 XAML 设计器显示错误消息“对象与目标类型不匹配”。以下简单的类足以重现该问题:
public class SubclassedResourceDictionary : ResourceDictionary
{
public SubclassedResourceDictionary() : base()
{ }
public string ExtraInfo { get; set; } = string.Empty;
}
一个有趣的线索是它只在引用自定义属性时显示异常。第三个条目显示了异常,但第二个没有:
<ResourceDictionary Source="Styles/BorderStyling.xaml"/>
<local:SubclassedResourceDictionary Source="Styles/BorderStyling.xaml"/>
<local:SubclassedResourceDictionary ExtraInfo="foo" Source="Styles/BorderStyling.xaml"/>
通常我会忽略它作为又一个设计错误,但我的真实代码也实现了ISupportInitialize
抛出异常的接口,以警告开发人员自定义属性的无效组合。这些异常从未显示,这至少告诉我目标类型异常发生在我的代码运行之前。
我想知道用于存储资源的集合是否具有仅接受“真实”ResourceDictionary
对象的代码。无论子类是在MergedDictionary
列表中还是在其他资源列表(例如<Window.Resources>
. 但是,同样,它实际上是构建和运行的,所以如果这是问题所在,也许它特定于设计者验证?
该问题似乎与2015 年的此问题相似,但接受的答案仅表示这是一个将被修复的错误(随后有一条评论指出它未修复)。同样的错误?任何变通办法?
我还发现这个答案听起来可能是相关的,但我无法弄清楚如何尝试它。VS2017 似乎不提供对设计器文件的访问,除了文件视图(不是解决方案视图,可以修改属性)。