En mis ratos libres ...

06 marzo 2012

Personalizando Ventanas en WPF


Ventanas Transparentes y Personalizadas  en WPF

     Hola amigo si estas empezando con WPF este Post es para ti, vamos a crear una ventana transparente en forma de circulo, con sus botones de cerrar y minimizar. 
De manera personal me gusta trabajar con el Visual Studio 2010. Manos a la obra.

     Dentro del  Visual Studio 2010 creamos un nuevo proyecto de tipo "Aplicación WPF" vamos a llamarlo VentanaTransparente.


     Existen 2 propiedades fundamentales para hacer de una ventana normal, una ventana personalizable es decir que admita la transparencia y que tenga forma de circulo o cualquier otra forma distinta al tan acostumbrado diseño rectangular. 

  • AllowsTransparency: Esta propiedad establece que el área cliente de una ventana admita transparencia, si queremos que la ventana admita la transparencia tenemos que establecer la propiedad de la siguiente manera: AllowsTransparency="True".

  • WindowStyle: Esta propiedad establece el estilo del borde de una ventana. Para realizar nuestra ventana  en forma de circulo tenemos que establecer esta propiedad de la siguiente manera WindowStyle="None". De no establecerla nuestra ventana tendrá el clásico borde con sus botones de minimizar, maximizar y cerrar, que ya conocemos.

     Una vez establecido las propiedades basta con un poco de imaginación para crear nuestra ventana, el truco esta en que la ventana es transparente pero nuestro contenedor principal NO, en este ejemplo utilizo un Grid como contenedor principal, pero podemos utilizar cualquier otro (CanvasStackPanelDockPanel, etc.)


El código XAML de mi ventana queda de la siguiente manera:



    

        
         
          
         
        

        
         
        
          
           
            
             
             
            
           
          
          
         
        

        
         
        
          
           
            
             
             
            
           
          
        
          
         
        
        
    




El código C# de mi ventana queda de la siguiente manera:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace VentanaTransparente
{
    /// 
    /// Lógica de interacción para MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        //Cerrar Ventana
        private void Cerrar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.Close();
        }

        //Minimizar Ventana
        private void Minimizar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.WindowState = System.Windows.WindowState.Minimized;
        }

        //Mover Ventana
        private void MoverVentana(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }
    }
}


    Evidentemente hay cosas que podemos mejorar de este ejemplo, cosas para hacer mas eficiente este ejemplo a lo mejor organizando en otro tipo de contenedores podemos evitar agrupar controles, pero es ahí donde entra tu imaginación y tus ganas de innovar, espero que te sirva mi ayuda !


Edder Rosado Lira.

Descargar

3 comentarios:

  1. Respuestas
    1. Hola gracias por tu comentario, mira si puedes observar el código de los eventos de los botones son mínimos, una de las ventajas de trabajar con WPF es la separación del código de la interfaz con el código detrás(VB, o C#), sin embargo aquí te dejo como quedarían los eventos de este ejemplo escritos en VB, saludos.


      Private Sub MoverVentana(sender As Object, e As MouseButtonEventArgs)
      Me.DragMove()
      End Sub

      Private Sub Cerrar_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
      Me.Close()
      End Sub

      Private Sub Minimizar_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
      Me.WindowState = Windows.WindowState.Minimized
      End Sub

      Borrar

Copyright © Edder Rosado Lira | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com