tutorial c# wpf visual-studio-2010 xaml

c# - wpf xaml tutorial



La edición de XAML lleva al diseñador de Visual Studio a bloquearse (8)

Pregunta original

Estoy trabajando en una aplicación WPF con Visual Studio 2010, usando Telerik .

He estado lidiando con una gran cantidad de fallas cada vez que uso el diseñador: al hacer clic en un elemento, cambiar su posición, incluso al cambiar su nombre, se produce un bloqueo y se muestra la siguiente excepción:

System.ArgumentNullException Value cannot be null. to System.RuntimeType.MakeGenericType(Type[] instantiation) to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUtil.GetRuntimeType(Type type) to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkType.TryGetRuntimeType() to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkUtil.EnsureRuntimeType(Type type) to Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkProvider.GetRuntimeType(Type reflectionType) [...]

Intenté las siguientes cosas:

  • Desinstalar y reinstalar Telerik;
  • Desinstalar y reinstalar .NET 4.0;
  • Desinstale y reinstale Visual Studio.

Ninguno de estos intentos funcionó.

Esta mañana, me di cuenta de que el diseñador no se estrelló en absoluto, y entendí por qué: el diseñador se bloquea cuando abro o edito XAML .

Después de abrir XAML, Visual Studio comienza a congelarse y el diseñador se bloquea cada vez que intento hacer clic en algo. Si cierro Visual Studio y compila la solución ( sin abrir XAML ), todo funciona bien con el diseñador.

Supongo que algo va mal cuando Visual Studio intenta "convertir" el código XAML en elementos gráficos en el diseñador , y solo en esa dirección.

Pregunta : ¿Alguna vez has experimentado este tipo de cosas? ¿Tienes alguna idea de por qué la modificación de XAML causa bloqueos y cómo resolverlo?

Gracias de antemano.

Nuevos intentos realizados después de leer las respuestas

  • Depure la instancia de Visual Studio en sí cuando el diseñador abre. El método que conduce a ArgumentNullException es GetRuntimeTime . Pude ver el código .NET pero no pude determinar el origen del problema. Vea el rastro de pila completo a continuación:

Además, esta es la línea exacta donde se produce el error y los detalles de la excepción. Tenga en cuenta que el archivo es VSIsolationProviderService.cs y que puedo ver el código fuente gracias al .NET Reflector Object Browser .

Message=Value cannot be null. Source=mscorlib StackTrace: to System.RuntimeType.MakeGenericType(Type[] instantiation) InnerException: null

Finalmente, el inspector de Local Variables en el momento de la excepción muestra el siguiente objeto:

Fin del objeto:

Respuestas a los comentarios:

  • El valor de this._targetFrameworkProvider en la línea donde se produce la excepción se muestra a continuación.

¡Supongo que tu mejor apuesta es depurar Visual Studio!

  • Ejecute Visual Studio (instancia n. ° 1) y cargue su solución
  • Ejecutar una segunda instancia de Visual Studio (# 2)
  • Desde la instancia n. ° 2, vaya a Depurar-> Adjuntar para procesar-> Seleccionar devenv.exe (instancia n. ° 1, asegúrese de seleccionar Depuración administrada)
  • A continuación, seleccione Depurar-> Excepción, presione "Buscar ..." y busque System.ArgumentNull y luego seleccione "Thrown".
  • Vaya a la instancia n. ° 1, cargue su vista en el diseñador, esto debería desencadenar un punto de quiebre en la instancia n. ° 2 y debería mostrar un rastro de pila completo. Esta información debería ser suficiente para identificar el componente / control ofensivo.

Además, leí en alguna parte que si comienzas como administrador te da problemas, prueba a iniciar Visual Studio no como administrador.

Lea This , un par de cosas aleatorias que puede intentar ...


Como dijo Gavin anteriormente, intente encontrar el control que es el problema.

Todavía puede editar los archivos en VS si hace clic con el botón derecho en el archivo .xaml, selecciona Open With y elige el Source Code (Text) Editor .

Puede configurarlo de manera predeterminada si espera que esté en muchos archivos, y cambiarlo cuando haya terminado.

Esta solución abrirá archivos .xaml sin un diseñador, pero con (algunos) intellisense.


Creo que el problema que está viendo está relacionado con uno de los controles que está utilizando.

Déjame mostrarte primero una forma de reproducir este problema; si es el mismo problema que estás viendo. (Estoy usando VS 2013 que maneja este problema un poco mejor que vs 2010)

En primer lugar, creé un control personalizado que es un TextBox; y tengo un código que se ve así.

public class CustomTextBox : TextBox { public string testText { get; set; } public CustomTextBox() : base() { if (string.IsNullOrEmpty(testText)) { throw new ArgumentNullException(); } } }

luego pongo este control en el xaml

<Grid> <local:CustomTextBox/> </Grid>

Todo lo que hago es lanzar una excepción cuando una propiedad es nula cuando el control llama a su constructor (lo que hará cuando esté en el diseñador cuando el diseñador intente actualizarlo y renderizarlo).

En VS2013 simplemente tengo una línea roja debajo del control en el propio XAML, pero a partir de la experiencia pasada con VS2010, este problema hizo que el diseñador se cayera.

Lo que le sugiero que haga es ir a través del XAML sin el diseñador y sacar un control de terceros / personalizado uno a la vez. Uno de estos controles puede arrojar una excepción que puede producir lo que está viendo. Si es uno de los controles de Telerik, contactarlos es una opción.


Intente inicializar el objeto runtimeType con typeof (Type) como

Type runtimeType = typeof(Type)

También evalúe el valor de las variables reflectionType,this,this._targetFrameworkProvider and this._targetFrameworkProvider.GetRunTimeType(reflectionType) en un reloj durante la depuración.

Esto podría ayudarte.


La ruptura de VS2010 con cierto XAML es un problema bastante conocido.

¿Has intentado agregar este código al evento de carga del control ofensivo?

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

¿Qué causa el bloqueo del Diseñador VS 2010 SP1 WPF?



Si crees que podría estar relacionado con un componente que estás utilizando, puedes probar y depurar el modo de diseño de Visual Studio y ver en qué escenario se lanza ArgumentNullException o al menos obtener el CallStack cuando se lanza la excepción.

Vea este enlace: ¿Cómo solucionar problemas y depurar errores del modo de diseño de Visual Studio?

Personalmente lo hago con una instancia de Blend y una instancia de Visual Studio en lugar de dos instancias de Visual Studio.

También probaría de un nuevo proyecto completo sin dependencias externas para ver si podría estar relacionado con tu instalación de Visual Studio