WPF Designer "Не удалось создать экземпляр типа" - PullRequest
17 голосов
/ 14 мая 2009

В моем пользовательском интерфейсе XAML я по существу наследую от класса «BaseView», который содержит функциональные возможности, общие для нескольких форм, однако это не позволяет разработчику отображать форму: «Не удалось создать экземпляр типа BaseView». Код будет скомпилирован и запущен, но расстраивает отсутствие возможности увидеть форму в Designer. Есть ли способ лучше? Благодарю.

XAML:

<vw:BaseView 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vw="clr-namespace:ReviewClient"   
    x:Class="ReviewClient.MainPage"

...

Ответы [ 9 ]

21 голосов
/ 18 мая 2009

Проблема заключалась в том, что базовый класс был определен как абстрактный. Это заставило дизайнера потерпеть неудачу. Эта проблема более подробно описана в разделе комментариев блога Лорана Бюньона: http://geekswithblogs.net/lbugnion/archive/2007/03/02/107747.aspx

8 голосов
/ 29 января 2013

Я нашел очень полезное решение для этого на: http://www.progware.org/Blog/post/WPF-Designer-Error-Could-not-create-an-instance-of-type.aspx.

Эта ссылка объясняет, как в окне дизайнера WPF запускается конструктор для отображения пользовательского интерфейса в XAML и способ его устранения: добавление следующего фрагмента в любую часть кода конструктора, которая может выдавать ошибку:

if(!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
   //code producing exception         
}

имя функции говорит само за себя. :) Эта ссылка также предоставляет решения проблем отладки в XAML.

4 голосов
/ 04 января 2010

Другая возможная причина, как мы только что нашли здесь, поэтому я добавляю этот ответ для будущих пользователей, заключается в том, что проект размещен на ненадежном источнике, например на файловом сервере.

В этом случае конструктор не загружал сборку и выдавал ту же ошибку «Не удалось создать экземпляр ...». Решение все равно будет собираться и отлаживаться ОК.

2 голосов
/ 02 марта 2012

Другая причина. Мой класс управления имел статическое поле, которое было инициализировано из ресурсов, например:

 static Color s_ImgColor = (Color)TheApp.Resources["PhoneForegroundColor"];

Это вызвало бы исключение нулевой ссылки в редакторе XAML, поскольку ресурсы недоступны в режиме разработки. Если бы это был не цветовой ресурс (скажем, кисть), это не было бы проблемой, но тип-тип к значению-типу выбрасывает нулевую ссылку.

1 голос
/ 25 мая 2010

Еще одна возможная причина.

У меня есть пользовательский элемент управления, который имеет дочерние элементы управления, которые генерируют события, например, selection_change в списке управления. Обработчик события select_changed вносит изменения в другие дочерние элементы управления.

Во время инициализации свойство выбранного элемента в окне списка изменяется и вызывает событие selection_changed. Обработчик пытается обновить другие дочерние элементы управления, но не может этого сделать, потому что они еще не созданы. Это приводит к исключению нулевого указателя и вызывает проблему.

Как только проблема с нулевым указателем была решена, элемент управления мог быть создан и появился в родительском элементе управления.

0 голосов
/ 03 августа 2013

Причина, по которой я получил эту ошибку, была проста, но мне трудно ее отследить. Мой конвертер не был публичным. Простое изменение доступности класса исправило это.

    public class StringToLowerConverter : IValueConverter
0 голосов
/ 28 мая 2013

И еще одна возможная ситуация (это актуально как минимум для SL для WP):

Если вы создаете экземпляр вашего класса (например, <local:MyDataSource />), тогда он должен быть общедоступным . Если ваш класс является внутренним, он будет работать во время разработки, но потерпит неудачу с этим исключением во время выполнения.

0 голосов
/ 14 сентября 2012

В WinForms можно использовать конструктор с абстрактными элементами управления, если использовать пользовательский TypeDescriptionProvider для информирования дизайнера о конкретной реализации:

Я использую решение в этом ответе на другой вопрос, который связывает эту статью . В статье рекомендуется использовать пользовательскую TypeDescriptionProvider и конкретную реализацию абстрактного класса. Дизайнер спросит пользовательский поставщик, какие типы использовать, и ваш код может вернуть конкретный класс, чтобы дизайнер был доволен, пока вы полностью контролируете, как абстрактный класс выглядит как конкретный класс.

0 голосов
/ 27 октября 2010

У меня проблема с тем, что мой класс MVVM имеет доступ к базе данных в конструкторе, и это была проблема, он выдает исключение. Мне нужно только проверить, работает ли приложение в режиме разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...