Я унаследовал от ResourceDictionary
, чтобы добавить несколько пользовательских свойств для поддержки скиннинга.Все компилируется и работает правильно, но конструктор XAML VS2017 показывает сообщение об ошибке «Объект не соответствует типу цели».Для воспроизведения проблемы достаточно следующего простого класса:
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, по-видимому, не обеспечивает доступ к файлам конструктора, кроме как в представлении файла (не в представлении решения, где можно изменить свойства).