.net - como - WPF, ''Referencia de objeto no establecida en una instancia de un objeto'' en Designer
referencia a objeto no establecida como instancia de un objeto. genexus (8)
En Visual Studio 2015 para WPF:
- Pase el mouse sobre la "Referencia del objeto no configurada para una instancia de un objeto" en la vista Diseño.
- Espere un (unos) segundo (s) y verá una ventana emergente
- Seleccione " Ver detalles de excepción " (también verá "Ver código" y "Eliminar este elemento"
- 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.
Obtengo el error "Referencia de objeto no configurado a una instancia de un objeto" cuando intento volver a cargar el Diseñador para mi User UserControl
XAML. Visual Studio resalta la siguiente línea como el problema:
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
Width="600" TemplateData="{Binding ElementName=cbo_templates,
Path=SelectedItem.Data, Mode=OneWay}"/>
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:
<ComboBox ItemsSource="{Binding Path=List}" Grid.Row="1" Grid.Column="3"
VerticalAlignment="Center" x:Name="cbo_templates" Width="250"
HorizontalAlignment="Left" DisplayMemberPath="Name"
SelectedValuePath="Name" SelectedIndex="0"/>
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 <Grid> in XAML
Constructor de UserControl
que intento incrustar, aquel cuya carga de diseño carga bien:
InitializeComponent();
grd_templateDetail.DataContext = this; // refers to containing <Grid> 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<Template>),
typeof(TemplateList),
new PropertyMetadata(
new List<Template> { _defaultTemplate }
)
);
Incluso si intento 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":
<local:TemplateDetail Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
TemplateData="{Binding}"/>
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
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:
<Button Click="{Binding MyCommand}" />
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!
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 compila 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 here para información detallada.
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.
- Haga que su solución se cargue en Visual Studio como de costumbre.
- 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 desmontaje no se puede mostrar en modo de ejecución".
- 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
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.
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:
<ResourceDictionary>
<DataTemplate x:Key="ThisKeySolvesDesignersNullRef"
DataType="local:MyViewModel">
<local:MyControl/>
</DataTemplate>
</ResourceDictionary>
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.