¡Bienvenid@ a La bloguera.net! Iniciar sesión | ÚNETE a la web | Ayuda

Code Factory

Proof of Concept

Visualizar por etiquetado

Todas las etiqu... » Visual Studio 2005   (RSS)
WPF: Habilitar la depuración de XAML

Uno de los problemas más habituales a la hora de depurar una aplicación WPF, es el de cometer errores dentro del XAML que define nuestra interfaz. Por defecto las excepciones nos muestran un mensaje que de poco ayuda:

Error in markup file 'Namespace;component/WMain.xaml' Line 1 Position 9.

Si nos paramos a pensar unos segundos en la estructura de las ventanas en XAML, rápidamente nos daremos cuenta que en la primera línea, en la posición 9, está parte de la definición de nuestra ventana, y rara vez es la causante del problema.

Por defecto, Visual Studio no muestra los detalles de las excepciones que son provocadas por un error en el XAML, pero esto lo podemos cambiar siguiendo estos sencillos pasos:

  1. Pulsamos sobre el menú Debug (Depuración)
  2. Seleccionamos Exceptions... (Excepciones) Ctrl+Alt+G
  3. En la ventana que se nos muestra pulsamos el botón Add... (Añadir)
  4. Seleccionamos en el campo Type: Common Language Runtime Exceptions
  5. Escribimos en el campo Name: System.Windows.Markup.XamlParseException
  6. Desplegamos el árbol de Common Language Runtime Exceptions y marcamos la casilla de Thrown

excepciones

Acto seguido volveremos a depurar la aplicación, lo que, una vez se dispare la excepción, nos mostrará un mensaje como el que sigue:

Cannot convert the value in attribute 'Background' to object of type 'System.Windows.Media.Brush'. Token is not valid.  Error at object 'System.Windows.Controls.Grid' in markup file 'Namespace;component/WMain.xaml' Line 10 Position 6.

El grupo de producto está trabajando en la mejora de este aspecto en la versión 2008 de Visual Studio (Antes conocida como Orcas).

Espero que este pequeño truco os resulte de utilidad y os  ayude a solucionar algún que otro problema.

Tip: Adaptándonos al modelo de aplicaciones Office 2007

Con el nuevo patrón de diseño de interfaces de usuario basado en Office 2007, se crea una nueva necesidad como algo común  y que deberemos tener muy presente a la hora de asignar funcionalidad a nuestras aplicaciones.

Esta nueva necesidad es la de modificar propiedades de un formulario Hijo desde el formulario Padre y al contrario.
Pero os preguntaréis el porqué de lo que escribo, pues os lo explico:

Dentro de la guía de estilo de IU de Office 2007 se definen las “Main Ribbon Tabs” (o pestañas principales de “cintas”) que no son nada más que pestañas dentro del formulario principal (Parent) que contienen Ribbons (contenedores que agrupan botones (mayoritariamente) con funcionalidad común entre ellos) con botones dentro.

Pues bien, estos botones deben afectar o cambiar el contenido del documento o formulario activo, pero también podemos necesitar hacer lo opuesto, es decir que dependiendo del contenido que estemos tratando en cada momento estos Main Ribbon Tabs se modifiquen o cambien de estado.

Para lograr esto podemos recurrir a las siguientes líneas de código que nos permitirán acceder a las propiedades, métodos y eventos de un formulario Padre desde uno Hijo y a la inversa:

Acceder a un formulario Padre desde el Hijo:

frmPadre padre = (frmPadre)this.MdiParent;
padre.Text = "Formulario Padre - Modificado";

Acceder a un formulario Hijo desde el Padre:

Método 1:

 

//Nos permite recorrer la coleción de formularios hijos abiertos

foreach (Form f in this.MdiChildren)

    {

       if (f.Text == "Formulario Hijo") f.Text = "Formulario Hijo";

    }

 

Método 2:

 

//Creamos una nueva instancia de un formulario hijo y cambiamos sus propiedades

frmHijo hijo = new frmHijo();

hijo.MdiParent = this;

hijo.WindowState = FormWindowState.Maximized;

hijo.Show();

 

Método 3:

 

//Modificamos una instancia ya creada de un formulario hijo activo

frmHijo hijo = ((frmHijo)this.ActiveMdiChild);

hijo.Text = "Formulario Hijo - Modificado";

 

 

Espero que este pequeño Tip os sea de utilidad.

 

Error en el diseñador de Visual Studio 2005

Me he encontrado con un error en el diseñador de Visual Studio 2005 Professional (versión en español) que resulta bastante molesto.

Estaba desarrollando un proyecto WinForms que tenía un DataSet agregado e instanciado en un formulario, y cual es mi sorpresa, cuando al intentar agregar un evento FormClosing el diseñador de Visual Studio hacía desaparecer la línea:

this.DataSet = new DataSet();

dentro de la Región y de InitializeComponent():

#region Windows Form Designer generated code

private void InitializeComponent()

{}

del archivo Form.designer.cs.

El único modo de evitar esto es irse al archivo y mediante el editor de código agregar el evento a mano. De otra forma obtendremos un error de compilación que nos advierte de que no existe la referencia a nuestro dataset.

Espero que en el ServicePack1 de Visual Studio corrijan este error.