Terminar una aplicacion WPF

26 marzo 2010

 

Problema: Como termino una aplicacion WPF sin tener que recurrir al Window.close() de la ventana principal?

Solucion:

System.Windows.Application.Current.Shutdown();

Nota: Esto no termina la aplicacion inmediatamente. Si por ejemplo ejecutamos esto dentro de un bucle while, la aplicacion puede seguir corriendo indefinidamente si no se cumple la condicion de salida del bucle. Mas info aqui

Problemas con ObservableCollection y XAML

5 enero 2010

Problema: Cuando le hago un databinding declarativo (desde xaml)  de un control (p.ej. un gridview o un dropdownlist) a una propiedad  en código que contiene una ObservableCollection, no funciona o no funciona como me esperaba.

Solucion: Hay que revisar que la propiedad DataContext del control está correctamente asignada (o correctamente heredada) para que pueda encontrar la propiedad que contiene la ObservableCollection. Lo mismo para las propiedades path para que los valores que queremos se muestren correctamente.
Hay que tener en cuenta que el objeto ObservableCollection debe de estar disponible como una propiedad pública (get), y que las propiedades de los objetos que contiene la ObservableCollection y que queremos mostrar, también deben de estar disponibles a través de  una propiedad pública(get). 
Hay que tener en cuenta también que debemos haber asignado o creado el objecto ObservableCollection antes de que sea procesado el XAML (llamada a InitializeComponent()), de lo contrario el control que esté bindeado a la propiedad ObservableCollection no se enterará de los cambios en la colección hasta que no volvamos a asignarle en su propiedad correspondiente (p.ej. ItemsSource)  una nueva ObservableCollection sobre la que trabajar.
Por último, tener en cuenta que los cambios solo se verán reflejados automáticamente en WPF si trabajamos con la ObservableCollection original, si asignamos una nueva ObservableCollection a la propiedad que se referencia desde XAML, desde WPF no se apreciarán cambios (ya que en realidad estaríamos modificando otra ObservableCollection diferente, la lista referenciada desde el control no habría cambiado)

WPF, binding a propiedades locales desde XAML

5 enero 2010

Problema: ¿Cómo se puede acceder a las propiedades locales (las del codebehind, vamos) de una ventana o user control WPF desde el XAML?

Solución: La forma más sencilla es asignar al datacontext de la ventana o control la propia ventana o control, con la siguiente declaración:

DataContext="{Binding RelativeSource={RelativeSource self}}"

Esto dentro de la etiqueta <Window> o <UserControl>, dependiendo de lo que se trate.
Así el DataContext de la ventana quedaría fijado a ella misma, y las propiedades públicas serían accesibles escribiendo el nombre de estas.

Mostrar errores de las páginas de sharepoint

9 octubre 2009

Problema: Ocurre un error en mis páginas de Sharepoint, pero me sale la página de error genérica y no hay manera de saber de qué es.

Solución: Modificar el web.config del sitio y dejar las siguientes líneas así:

En la sección <System.web>:

<customErrors mode="Off"/>

Y luego buscar:

<SafeMode MaxControls=”200″ CallStack=”false”…

y poner

<SafeMode MaxControls=“200“ CallStack=”true”…

¿Cómo se hace la función trim en javascript?

7 agosto 2009

Problema: ¿Cómo puedo hacer la función trim en javascript?

Solución: Mediante una expresión regular sale:

function trim(str)
    {
        return str.replace(/^\s\s*/, ”).replace(/\s\s*$/, ”);
    }

Validar varias direcciones de correo por expresiones regulares

7 agosto 2009

Problema: Sé como validar una dirección de correo mediante javascript y expresiones regulares, pero no sé cómo hacerlo para permitir que se puedan introducir varias direcciones separadas por el caracter coma.

Solución: Esta expresión regular valida varias direcciones de correo separadas por coma o por punto y coma, y se permiten también espacios en blanco entre las direcciones de correo a ambos lados del separador (, 😉

var emailRegEx = /^(([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+)(([\s]*[;,]+[\s]*(([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+))*)$/;

Postbacks indeseados en Firefox con el control <button>

27 julio 2009

Problema: Estoy trabajando en una página asp.net, y cuando pongo un control HTML del tipo <button>, en el Explorer funciona como me espero que funcione, pero en el Firefox cada vez que le doy me causa un postback de la página

Solución: Basta con declarar el comportamiento del botón con el atributo “Type”. El problema surge al no incluir este atributo, ya que Firefox toma por defecto el valor “submit”, mientras explorer toma por defecto el valor “button”.

<button type=”button”></button>

Cómo se pasa un código de color en HTML a un objeto de .NET

14 julio 2009

Problema: Tengo un un código de color en HTML (Por ejemplo #E8E8F3 y quiero usarlo en .NET, pero no puedo usarlo directamente porque los colores en .NET tienen que ser de la clase System.Drawing.Color y no sé a qué color se corresponde.

Solución: Usar la siguiente función

System.Drawing.ColorTranslator.FromHtml("#E8E8F3")

Y si lo queremos a la inversa, esto nos convertiría un System.Drawing.Color en una cadena con el código HTML

System.Drawing.ColorTranslator.ToHtml(color);

No me funciona el Intellisense en visual studio 2008

3 junio 2009

Problema: No sé qué es lo que le he instalado al Visual Studio 2008, que desde hace unos días no me funciona el intellisense cuando trabajo con XAML (Ni con WPF ni con Silverlight)

Solución: Para ver si estamos hablando de lo mismo, comprueba en el registro (usando el regedit) si está vacía la entrada:

Para Windows de 32 bits:
HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32

Para Windows de 64 bits:
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32

Si la entrada (Default) está vacía entonces el problema se puede solucionar de la siguiente forma:

Abriendo una ventana de símbolo de sistema y escribiendo(cuidado que en vista habrá que estar como administrador)
Para Windows de 32 bits:
regsvr32 "%CommonProgramFiles%\Microsoft Shared\MSEnv\TextMgrP.dll"

Para Windows de 64 bits:
regsvr32 "%CommonProgramFiles(X86)%\Microsoft Shared\MSEnv\TextMgrP.dll"

Reinicia el Visual Studio y listo.

Solución tomada de aquí

Problemas con expresiones condicionales del tipo <condicion> ? expresion1 : expresion2

8 abril 2009

Problema: Tengo una expresión del tipo <condicion> ? expresion1 : expresion2 y al compilar me da el siguiente error: “Type of conditional expression cannot be determined because there is no implicit conversion between <tipo1> and <tipo2>

Solución: Este problema aparece porque las expresiones de este tipo solo pueden devolver un tipo, no dos. Al poner tipos diferentes como resultado de expresion1 y expresion2 el compilador nos daría ese error. Tenemos que decidir que tipo va a devolver la expresión y hacerle un casting a una de las dos expresiones. O si por un lado queremos devolver null y por otro un tipo primitivo (los cuales no pueden ser null) podemos usar los nullables. Ej:

string filtro;

(filtro.Equals(“todos”)) ? (bool?)null : false;