[WPF] Ventana sin bordes

Este no va a ser un artículo muy largo pues sólo se explicará cómo obtener una ventana sin bordes y agregar la funcionalidad de que se pueda mover, minimizar y cerrar.

Comencemos primero quitando los bordes de la ventana.

<Window x:Class="Windowless.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        WindowStyle="None"
        AllowsTransparency="True" Background="Transparent">

</Window>

La propiedad WindowStyle nos ayudará a quitar el borde donde se encuentra los botones (maximizar, minimizar y cerrar); con la propiedad AllowsTransparency creará una zona donde se permita la transparencia, esto unido al Background transparente terminará en una ventana completamente transparente.

Ahora veamos el resto de código donde se muestra la creación de la barra de título y los botones.

<Border Margin="10" BorderBrush="Red" BorderThickness="0.5">
    <Border.Effect>
        <DropShadowEffect Color="Black"
                          Direction="320"
                          BlurRadius="15"
                          ShadowDepth="3" />
    </Border.Effect>
    <DockPanel LastChildFill="True" Background="White">
        <Grid DockPanel.Dock="Top" Height="25">
            <TextBlock Text="{Binding Path=Title, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
                       HorizontalAlignment="Center" />
            <Rectangle Name="titleBar"
                       Fill="Transparent"
                       MouseLeftButtonDown="titleBar_MouseLeftButtonDown"/>
            <Button Name="closeButton"
                    Style="{StaticResource CerrarStyle}"
                    HorizontalAlignment="Right"
                    Width="15" Margin="0,0,5,0" Height="15"
                    Click="closeButton_Click"/>
            <Button Name="minButton"
                    Style="{StaticResource MinimizarStyle}"
                    HorizontalAlignment="Right"
                    Width="15" Margin="0,0,25,0" Height="9"
                    Click="minButton_Click"/>
        </Grid>
        <Grid Name:"Contenido">

        </Grid>
    </DockPanel>
</Border>

Los eventos de los botones y el rectángulo están definidos así:

private void titleBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    this.DragMove();
}

private void closeButton_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

private void minButton_Click(object sender, RoutedEventArgs e)
{
    this.WindowState = System.Windows.WindowState.Minimized;
}

Y eso sería todo para crear nuestra ventana sin bordes. Como siempre les dejo el archivo en C# (Windowless.zip), esta vez no publicaré el de VB.NET pues es bastante sencillo de convertir.

Anuncios

Leer y Escribir xml usando Linq

Este va a ser un pequeño artículo donde veremos cómo leer y escribir un documento xml usando Linq. La estructura que va a tener nuestro documento al final será la siguiente:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Personas>
    <Persona>
        <Nombre> </Nombre>
        <Apellido> </Apellido>
        <Edad></Edad>
        <Correo> </Correo>
    </Persona>
</Personas>

Para leer un documento con esta estructura, debemos hacer esto usando Linq:

XDocument xdoc = XDocument.Load(archivo);

lista = (from x in xdoc.Descendants("Persona")
         select new Persona
         {
             Nombre = x.Element("Nombre").Value,
             Apellido = x.Element("Apellido").Value,
             Edad = Convert.ToInt32(x.Element("Edad").Value),
             Correo = x.Element("Correo").Value
         }).ToList();

Aclaremos ciertas cosas con respecto al código anterior: primero, la variable archivo es un string donde se guarda la ruta del archivo que deseamos leer; segundo, Persona es una clase la cual tiene como propiedades Nombre, Apellido, Edad y Correo; por último, la variable lista es una lista del tipo List<Persona> la cual contendrá todos los registros del archivo leído.

Para obtener más información puede mirar esto enlaces sobre Descendants y Element. Si desea aprender más de xml puede leer este tutorial en W3Schools.

Vayamos ahora a la parte de escribir el archivo xml:

if (dataGrid.ItemsSource != null)
{
    XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
            new XElement("Personas",
            from x in dataGrid.ItemsSource.Cast<Persona>()
            select
              new XElement("Persona",
                 new XElement("Nombre", x.Nombre),
                 new XElement("Apellido", x.Apellido),
                 new XElement("Edad", x.Edad),
                 new XElement("Correo", x.Correo)
              )
          )
    );
    xdoc.Save(archivo);
}

El proyecto está en WPF así que estoy usando un DataGrid donde cargo los datos por eso se aprecia ahí la propiedad ItemsSource, pero si usas Windows Form (WinForms) ¡espera! porque este artículo no es con respecto a la interfaz gráfica sino al lenguaje de programación. Para los que usan WinForms pueden cambiar esa parte del código por la variable lista. Como una nota para las personas que desarrollan usando WPF, si descargan el código podrán ver que he usado conceptos que expliqué en Validación en WPF y 2 Ventanas usando WPF de forma desacoplada para crear este proyecto.

Y así de fácil podemos crear y leer documentos xml utilizando Linq. Espero que a las personas que no han probado Linq, este artículo los mueva a aprender un poco más de este proyecto que ha revolucionado la forma en la que hacemos consultas. Aquí les dejo el código en C# XML2LINQ.zip y esta vez les debo el de VB.NET aunque en poco tiempo lo convertiré y aquí en VB.NET usando Windows Form XML2LINQ-VB.zip. Recuerden quitar la extensión .odt y dejar la .zip.

Movilízate con Windows Phone 7.5 Mango

El próximo martes 8 de Noviembre Second Nug os mostrará como Windows Phone 7.5 (Mango)  representa un avance importante en la plataforma. Los usuarios obtienen características como tonos personalizados, cambio de aplicación rápido, más interactividad en los Tiles, Tethering y muchas más.

Pero los programadores nos vemos beneficiados con un gran aumento en las opciones de desarrollo de aplicaciones, más acceso al sistema, mayor rendimiento de nuestras aplicaciones y nuevas APIs que nos permitirán realizar nuevos y sorprendentes desarrollos.

En este Webcast daremos un repaso por las características más destacables: Silverlight 4, MVVM, Expression Blend para Windows Phone 7.5, SQL Server CE, Nuevo Ciclo de vida dela aplicación, Acceso a los contactos del usuario, Acceso al sistema de recordatorios y alarmas en segundo plano, y Live Tiles de aplicación y secundarios.

Esto y más lo veremos con Josué Yeray, Development  Advisor en Plain Concepts y galardonado con el Microsoft Community  Contributor 2011.

Enlace al Evento: Movilízate con Windows Phone 7.5 Mango

Microsoft Community Contributor Award 2011

Bueno ya ha pasado bastante desde la última vez que publiqué un artículo, pero no hay que desesperar pues pronto publicaré algunos.

No quiero desviarme así que voy al punto de este artículo, hoy he recibido un correo por parte de Microsoft que comenzaba de esta forma:

Dear Antonio,

Congratulations! We’re pleased to inform you that your contributions to Microsoft online technical communities have been recognized with the Microsoft Community Contributor Award.

El Microsoft Community Contributor, es un galardón o premio que otorga Microsoft que está diseñado para reconocer las contribuciones notables a las comunidades de foros online de Microsoft, tales como TechNet, MSDN, etc.

Quiero compartir este con todas las personas que forman la comunidad ya que son todos ellos los que hacen que día tras día me interese más por la tecnología, aprendiendo de los errores y de las buenas prácticas.

Saludos y Gracias a Todos!

Prueba el Futuro: Windows 8 Developer Preview y Visual Studio 11

En el día de ayer culminó el evento BUILD el cual nos trajo novedades acerca de Windows 8 y también de Visual Studio 11. Hoy tenemos enlaces de descarga para probar el Windows 8 Developer Preview y cito desde la página original:

El Windows Developer Preview es una versión pre-beta de Windows 8 para los desarrolladores. Estas descargas incluyen software preliminares que pueden cambiar sin previo aviso. El software se proporciona tal como está, y usted asume el riesgo de su uso. Puede que no sea estable, funciona correctamente o el trabajo de la forma en que la versión final del software. No se debe utilizar en un entorno de producción. Las características y funcionalidad en la versión preliminar del software pueden no aparecer en la versión final. Algunas características del producto y la funcionalidad pueden requerir hardware avanzado o adicional, o la instalación de otro software.

Así que si no se pueden aguantar a probarlo al igual que yo, les invito a descargar esta versión.

Enlace de descarga| Windows Developer Preview
Foro | Windows Metro style apps Forums
Características Visual Studio 11 | What’s New in Visual Studio 11 Developer Preview

Asegurando nuestro código | Parte 1

En esta corta serie de artículos demostraré cómo asegurar nuestro código fuente para que este no sea copiado/robado. Supongamos que hemos creado un programa y ahora tenemos 3 opciones para difundirlo: vender licencias, como software libre o freeware.

En este caso hemos creado nuestro programa para venderlo o al menos difundirlo como freeware. El programa sirve para tomar fotos, grabar videos y aplicar filtros a las imágenes obtenidas desde una cámara web; está creado en C# y usa WPF (Windows Presentation Foundation) y además implementa el patrón MVVM (Model-View-ViewModel). Este es el aspecto visual:

Seguros de que es un buen programa hemos creado nuestra página para promocionarlo y además ponemos una descarga a una versión con limitaciones (en tiempo o funcionalidad). Observamos que nuestro programa lo han descargado muchas personas, pero al cabo de 2 o 3 meses alguien saca al mercado un programa bastante similar al de nosotros, para sorpresa nuestra, es en realidad EL MISMO PROGRAMA!!

¡Qué gran decepción, Nuestro trabajo ha sido robado!

Veamos cómo nos robaron el programa: Sigue leyendo

Usando una WebCam con Window Form | Parte 3: Aplicando Filtros

En este artículo de la serie: Usando una WebCam  con Window Forms vamos a aplicar algunos filtros que están contenidos en el Framework de Aforge.NET. Utilizaremos las librerías Aforge.Video y Aforge.Video.DirectShow como de costumbre, solo que esta vez agregaremos Aforge.Imaging para usar Filters.

El Formulario será sencillo como los anteriores. Esta vez tendremos 2 ComboBox (uno para los dispositivos de video y el otro para los distintos filtros que vamos a usar), 1 Button (para iniciar o detener la Cámara Web) y un PictureBox (para mostrar el video capturado por la Cámara Web). El diseño de esto debe ser algo como:

El código para hacer operar la cámara web es el mismo que el de los pasados artículos, por lo tanto, so lo voy  poner aquí el código que ha cambiado o se ha agregado. Primero veamos lo que hemos de agregar: Sigue leyendo