WPF, «Ссылка на объект не установлена ​​в экземпляр объекта» в Designer

При попытке перезагрузить конструктор для моего XAML UserControl я получаю ошибку «Ссылка на объект, не установленную на экземпляр объекта». Visual Studio выделяет следующую строку как проблему:

  

TemplateDetail – это еще один UserControl . Когда я просматриваю TemplateDetail , его представление Designer загружается просто отлично, поэтому я не думаю, что там есть проблема. В моем XAML с именем cbo_templates есть cbo_templates который содержит экземпляры моего classа Template , который имеет свойство Data (следовательно, SelectedItem.Data ). Однако, если я .Data из Path в приведенном выше XAML, я все равно получаю ошибку «Ссылка на объект», поэтому я не думаю, что проблема в том, что я пытаюсь получить доступ к свойству Path на null . Вот мой ComboBox XAML на всякий случай:

  

Получение этой ошибки является реальной проблемой, поскольку представление Design не загружается, поэтому я не вижу, как выглядит мой UserControl не запуская приложение. Любая идея, что может быть неправильным? Он строит отлично, и я не вижу никаких проблем с привязкой в ​​Build Output.

Изменить: вот код конструктора для UserControl s:

Конструктор UserControl с ошибкой «Ссылка на объект»:

 InitializeComponent(); grd_templateList.DataContext = this; // refers to containing  in XAML 

Конструктор UserControl который я пытаюсь встроить, тот, чей вид дизайна загружается нормально:

 InitializeComponent(); grd_templateDetail.DataContext = this; // refers to containing  in XAML 

Редактирование: я попытался if (null != grd_templateList) проверку if (null != grd_templateList) в конструкторах перед установкой их свойств DataContext , но это не помогло – все равно получить ошибку «Ссылка на объект» при перезагрузке конструктора.

Изменить: свойство List которое использует ComboBox является DependencyProperty . У меня есть значение по умолчанию, установленное в методе Register :

 public static readonly DependencyProperty ListProperty = DependencyProperty.Register( "List", typeof(List), typeof(TemplateList), new PropertyMetadata( new List { _defaultTemplate } ) ); 

Даже если я попытаюсь инициализировать List в конструкторе для моего UserControl , я все равно получаю ошибку при перезагрузке конструктора. Я не думаю, что проблема в том, что List имеет значение null или SelectedItem.Data – это плохой путь.

Редактирование: хорошо, даже если это приводит к тому, что мой конструктор не загружается, что дает ошибку «Ссылка на объект»:

  

По-видимому, что-то не нравится в отношении свойства TemplateData .

Изменить: чтобы добавить к тайне, я могу просмотреть представление «Дизайн» моего общего / главного Window , которое включает в себя UserControl чье представление Design дает мне ошибку «Ссылка на объект». O_o

То, что говорит Алекс, – это путь. Но я думаю, что это немного запутывает, чтобы понять, что он говорит.

Предполагая, что ваш проект открыт в Visual Studio, откройте другой экземпляр Visual Studio и выберите Debug-> Attach To Process . В диалоговом окне, которое открывается, выберите

  • XDesProc.exe (который является дизайнером интерфейса XAML) для VS2012 и более поздних или
  • devenv.exe для старых версий VS.

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

Вероятно, это что-то в конструкторе ваших пользовательских элементов управления. Разработчик WP200 VS2008 имеет некоторые проблемы с этим.

В проекте, который мы приняли, мы добавили:

 if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { return; } 

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

Если ваш пользовательский элемент управления выдает исключение во время разработки, вы можете его отладить. Для этого откройте проект Dll с помощью этого пользовательского элемента управления в Visual Studio. Выберите другой экземпляр Visual Studio как исполняемый файл для отладки. Начните отладки. Во втором (отлаженном) экземпляре Visual Studio используйте свой пользовательский элемент управления на странице клиента XAML. Таким образом, вы можете отлаживать пользовательский контроль в режиме разработки.

Эта ветка действительно старая, но я просто помещаю ее здесь для людей, которые имеют такую ​​же проблему, и приходят сюда через Google.

Если у вас есть ссылка «Объект ссылка не установлена ​​в экземпляр объекта» в XAML, но ваше приложение компилируется и работает нормально, вы, как правило, узнаете, что его причиной является что-то в конструкторе, который не может быть разрешен во время разработки.

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

В этом случае просто нажмите кнопку «Отключить код проекта», расположенную в нижней части дизайнерского представления, и дизайнер Visual Studio перестанет пытаться создать экземпляр, чтобы обеспечить представление данных времени разработки.

См. Здесь подробную информацию.

введите описание изображения здесь

Эта ветка немного старая, но у меня была проблема, которую я только что решил с ее помощью, поэтому я могу немного прояснить некоторые моменты.

  1. Как обычно, ваше решение загрузилось в Visual Studio.
  2. Откройте второй экземпляр VS, menu debug / attach для обработки / выбора devenv. Вы не увидите ничего захватывающего! В VS 2010 я просто получаю: «Разборка не может отображаться в режиме запуска».
  3. Вернитесь к первому экземпляру, где ваше решение открыто. Загрузите или перезагрузите поврежденный файл XAML. Если у вас есть проблема (у меня было исключение в пользовательском элементе управления, поэтому я не мог загрузить это окно), отладчик должен указать код нарушения во втором экземпляре. в моем случае это было очень ясно и очевидно.

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

  If System.ComponentModel.LicenseUsageMode.Runtime = 1 Then myObject = New ObjectDefinition End If 

Работает отлично.

В Visual Studio 2015 для WPF:

  1. Наведите указатель мыши на «Ссылка на объект, не установленную на экземпляр объекта» в представлении «Дизайн».
  2. Подождите несколько (несколько) секунд (ы), и вы увидите всплывающее окно
  3. Выберите « Просмотреть сведения об исключении » (вы также увидите «Просмотреть код» и «Удалить этот элемент»,
  4. В этом диалоговом окне вы увидите исключение и StackTrace

Надеюсь это поможет.

Если вы сделаете это на XAML, вы увидите только исключение, но не всплывающее окно с «View Exception Details», поэтому вам нужно сделать это в представлении Designer / Design.

Я смог решить проблему после предоставления имени объекту. Это VS2015, и моя разметка отличается, но она тоже может помочь кому-то:

      

У меня была эта ошибка сегодня после редактирования большого количества XAML в моем коде UWP, и я не мог понять, что не так … но после некоторой тщательной проверки я заметил эту ошибку, которую я сделал:

  

Я по ошибке назначил свое командование обработчику Click, и это привело к исключению ссылочной ссылки … После изменения команды «Click to Command» ошибка исчезла.

Отчеты об ошибках XAML необходимо улучшить!

  • Как WPF UserControl наследует WPC UserControl?
  • Как программно установить выбранный элемент Panorama в WP7
  • Как получить доступ к элементу управления внутри шаблона данных в пользовательском интерфейсе C # Metro в коде
  • Найти элемент WPF внутри DataTemplate в коде
  • Разница между SelectedItem, SelectedValue и SelectedValuePath
  • Изображение кнопки мыши WPF
  • Как связать перечисление с элементом управления combobox в WPF?
  • Что означает «{x: Static}» в XAML?
  • Как прокручивать в нижней части ScrollViewer автоматически с помощью Xaml и привязки?
  • Связывание видимости DataGridTextColumn
  • WPF: слайдер с событием, которое запускается после того, как пользователь перетаскивает
  • Interesting Posts

    Получить список нулевых ссылочных кодов в Visual Studio

    IEnumerable и Recursion с возвратом доходности

    Как найти числа из строки?

    Неправильная настройка Linksys WRT54GL в качестве проводного маршрутизатора с Linsys WRT54GS в качестве точки беспроводного доступа

    Ошибка MatLab: невозможно открыть со статическим TLS

    Чтение IText в формате PDF, например pdftotext -layout?

    XPATHS и пространства имен по умолчанию

    Угловой тип контента не отправляется с помощью $ http

    Проблема с реальным устройством с использованием векторного изображения в android. SVG-андроид

    Как я могу заставить TFS2010 запускать MSDEPLOY для меня через MSBUILD?

    Случайно rsync –delete, / usr влияет, любой способ проверить и переустановить отсутствующий компонент?

    Как восстановить мою поверхность 3 после установки Windows 10 Tech Preview

    jqGrid: использование нескольких методов фильтрации данных

    Как установить различное приложение для каждой комбинации вкуса с использованием flavorDimensions?

    Пользовательский курсор в WPF?

    Давайте будем гением компьютера.