WPF, ‘Referencia de objeto no establecida en una instancia de un objeto’ en Designer

Obtengo el error “Referencia de objeto no configurado a una instancia de un objeto” cuando bash volver a cargar el Diseñador para mi User UserControl XAML. Visual Studio resalta la siguiente línea como el problema:

  

TemplateDetail es otro UserControl . Cuando veo TemplateDetail , su vista de Diseñador se carga muy bien, así que no creo que haya un problema allí. Hay un ComboBox en mi XAML llamado cbo_templates que contiene instancias de mi clase de Template , que tiene una propiedad de Data (de ahí SelectedItem.Data ). Sin embargo, si .Data de la Path en el XAML anterior, sigo recibiendo el error de “Referencia del objeto”, por lo que no creo que el problema sea que estoy tratando de acceder a la propiedad Path en null . Aquí está mi ComboBox XAML por si acaso:

  

Obtener este error es un problema real porque la vista Diseño no se cargará, por lo que no puedo ver cómo se ve mi UserControl sin ejecutar la aplicación. ¿Alguna idea de lo que podría estar mal? Construye bien y no veo ningún problema vinculante en el Build Output.

Editar: aquí está el código de constructor para ambos UserControl s:

Constructor de UserControl con el error “Referencia de objeto”:

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

Constructor de UserControl que bash incrustar, aquel cuya carga de diseño carga bien:

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

Editar: Intenté poner una comprobación if (null != grd_templateList) en los constructores antes de configurar sus propiedades de DataContext , pero eso no sirvió, ya que if (null != grd_templateList) error “Referencia del objeto” al volver a cargar el Diseñador.

Editar: la propiedad de List que ComboBox usa es DependencyProperty . Tengo un valor predeterminado establecido en el método de Register :

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

Incluso si bash inicializar List en el constructor para mi UserControl , sigo recibiendo el error al volver a cargar el Diseñador. No creo que el problema sea que List es nulo o SelectedItem.Data es una ruta incorrecta.

Editar: está bien, aunque solo sea por esto, mi Designer no se carga, dando el error de “Referencia del objeto”:

  

Hay algo que no le gusta que la propiedad TemplateData esté atada, aparentemente.

Editar: para agregar al misterio, puedo ver la vista Diseño de mi Window general / principal, que incluye el UserControl cuya vista Diseño me da el error “Referencia del objeto”. O_o

Lo que Alex dice es el camino a seguir. Pero creo que es un poco confuso entender lo que dice.

Suponiendo que tiene su proyecto abierto en Visual Studio, abra otra instancia de Visual Studio y seleccione Depurar-> Adjuntar al proceso . En el cuadro de diálogo que se abre, seleccione

  • XDesProc.exe (que es el Diseñador de UI de XAML) para VS2012 y posterior o
  • devenv.exe para versiones anteriores de VS.

Luego haga “Reload Designer” para el control de usuario y vea el resultado en la segunda instancia de VS para verificar exactamente cuál es el error.

Probablemente sea algo en el constructor de tus controles de usuario. El diseñador VS2008 WPF parece tener algunos problemas con esto.

En un proyecto que asumimos, agregamos:

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

al comienzo del constructor de los controles de usuario donde sucede esto para evitar ese error.

Si su control de usuario arroja una excepción en el momento del diseño, puede depurarlo. Para hacerlo, abra el proyecto Dll con este control de usuario en Visual Studio. Seleccione otra instancia de Visual Studio como ejecutable para la depuración. Comience a depurar. En la segunda instancia de Visual Studio (depurada) use su control de usuario en la página XAML del cliente. De esta manera, puede depurar el control del usuario en modo de diseño.

Este hilo es muy viejo, pero solo estoy exponiendo esto para personas que tienen el mismo problema y vienen aquí a través de Google.

Si tiene ‘Referencia de objeto no configurada para una instancia de un objeto’ en XAML, pero su aplicación se comstack y funciona bien, generalmente descubrirá que su causa es algo en un constructor que no se puede resolver en el momento del diseño.

Si bien puede averiguar la raíz del problema con la ayuda de otras respuestas a esta pregunta, a veces eso es algo que no puede solucionar simplemente, lo necesita en su código exactamente como lo tiene, pero no desea ver este error

En este caso, simplemente haga clic en el botón “Deshabilitar código de proyecto” ubicado en la parte inferior de su vista de diseñador y el diseñador de Visual Studio dejará de intentar construir una instancia para proporcionar una vista de datos de tiempo de diseño.

Vea aquí para información detallada.

enter image description here

Este hilo es un poco viejo, pero tuve un problema que acabo de resolver con su ayuda, por lo que podría aclarar un poco algunos puntos.

  1. Haga que su solución se cargue en Visual Studio como de costumbre.
  2. Abra una segunda instancia de VS, menú de depuración / adjuntar para procesar / seleccionar devenv. ¡No deberías ver nada espectacular! En VS 2010, acabo de recibir “El desassembly no se puede mostrar en modo de ejecución”.
  3. Regrese a su primera instancia, donde se abre su solución. Cargue o recargue el archivo XAML infractor. Si tiene un problema (tuve una excepción en un control de usuario, por lo que no pude cargar esa ventana), el depurador debe señalar el código ofensivo en la segunda instancia. en mi caso, fue muy claro y obvio.

Para evitar que el código ofensivo se ejecute en tiempo de diseño, utilicé

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

Funciona perfectamente bien

En Visual Studio 2015 para WPF:

  1. Pase el mouse sobre la “Referencia del objeto no configurada para una instancia de un objeto” en la vista Diseño.
  2. Espere un (unos) segundo (s) y verá una ventana emergente
  3. Seleccione ” Ver detalles de excepción ” (también verá “Ver código” y “Eliminar este elemento”
  4. Este diálogo le mostrará la excepción y el StackTrace

Espero que esto ayude.

Si hace esto en XAML, verá la excepción pero no la ventana emergente con “Ver detalles de excepción”, por lo tanto, debe hacerlo en la vista Diseño / Diseño.

Pude resolver el problema después de darle un nombre a un objeto. Es VS2015, y mi marcado es diferente, pero podría ayudar a alguien también:

      

Estaba teniendo este error hoy después de editar una gran cantidad de XAML en mi código UWP y no pude entender lo que estaba mal … pero después de una inspección minuciosa, noté este error que había cometido:

  

Por error, asigné mi comando al controlador Click y eso dio como resultado una excepción de referencia nula … Después de cambiar Click to Command, el error desapareció.

¡Es necesario mejorar los informes de errores XAML!