Abriendo archivos desde WPF

 [quads id=1]

Hola qué tal?, bueno pues en las dudas y comentarios, ha surgido una pregunta, la cual parafraseo:

“…estoy haciendo una aplicación en wpf, el problema es que necesito insertar una imagen, ojo, ésta es una imagen cualquier, lo que necesito es insertar imagenes que originalmente no estén en el proyecto… “

Ahora bien, cómo insertamos una imagen, o mas bien, la pregunta sería,¿ cómo obtengo acceso a un archivo en mi computadora?

Para efectos de esta demo, he creado un archivo WPF, con 2 elementos, un control del tipo Image, y un control del tipo Button:

image

Ahora bien, una cosa importante es ponerle nombre a ambos elementos, en este caso, al control image le he puesto por nombre imagen, y al boton btn_imagen.

[quads id=10]

Lo siguiente es declarar el evento para nuestro botón (lo pudes hacer dando doble click sobre el botón).

private void Button_Click(object sender, RoutedEventArgs e)
{
}

Ahora bien, tanto en winforms como en WPF, está disponible para nosotros la clase OpenFileDialog, el cual, nos permitirá abrir un cuadro de diálogo desde el cual podremos seleccionar uno o mas archivos a ser abiertos, entonces no queda mas que declarar una nueva instancia de dicha clase:

OpenFileDialog openFileDialog1 = new OpenFileDialog();

Bien, ahora, tenemos que especificar un filtro para los archivos que buscaremos, ya sean con extensión .txt, .docx, etc etc etc, esto lo hacemos con la propiedad Filter:

openFileDialog1.Filter = "Archivos de imágen (.jpg)|*.jpg|All Files (*.*)|*.*";

Como puedes darte cuenta, en este caso hemos especificado que cuando abra el cuadro de diálogo, aparezcan como selección los archivos con extensión .jpg, y por otro lado, todos los archivos.

Lo siguiente es declarar la propiedad de Index a 1, esto es para obtener el Index del filtro que anteriormente especificamos, dentro de nuestro cuadro de diálogo:

openFileDialog1.FilterIndex = 1;

Permitiremos que varios archivos puedan ser selccionados a la vez, o sólo uno? En este caso le diremos que podrán ser varios, con la propiedad Multiselect:

openFileDialog1.Multiselect = true;

Ahora, falta checar si hemos presionado el botón de OK o el de cancel, esto se puede hacer fácilmente con una declaración de un booleano, al cual se le asigne la respuesta del file dialog:

bool? checarOK = openFileDialog1.ShowDialog();

Ok, en dado caso de que haya el usuario clickeado en OK, debemos especificar qué pasará, para esto usaremos la propiedad “FileName”, la cual, obtiene la ruta del archivo que hayamos selccionado, la cual es una cadena; un breakpoint aquí, y es que, si checamos en las dependency propierties de WPF, veremos que Image tiene una llamada source, a la cual normalmente le asignamos la ruta de los archivos que tenemos(p.e. \images\imagen.jpg), por lo que fácilmente podríamos irnos con la finta de que quedaría algo así:

imagen.source = openFileDialog1.FileName.ToString;

pues eso es totalmente erróneo, lo que debemos hacer, es crear un nuevo BitmapImage, con la ruta que nos haya arrojado precisamente FileName de nuestro cuadro de diálogo, y posteriormente asignarselo al control Image:

imagen.Source = new BitmapImage(new Uri(openFileDialog1.FileName));

Ahora,  a probar nuestra aplicación:

La ventana principal:

image

La ventana después de haber presionado el botón:

image

La ventana después de haber seleccionado una imágen:

image

Entonces, el código final queda:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
    openFileDialog1.Filter = "Archivos de imágen (.jpg)|*.jpg|All Files (*.*)|*.*"; 
    openFileDialog1.FilterIndex = 1; 
    openFileDialog1.Multiselect = true; 
    bool? checarOK = openFileDialog1.ShowDialog(); 
    if (checarOK==true) 
    {               
        //imagen.source = openFileDialog1.FileName.ToString; 
         //(System.Windows.Media.ImageSource) 
        imagen.Source = new BitmapImage(new Uri(openFileDialog1.FileName)); 
    } 
}

Y aquí está el enlace para descargar la demo:

AbrirImagen.zip

Salu2 y éxito 😉

Héctor Pérez

4 comentarios en “Abriendo archivos desde WPF”

  1. un favor.
    estoy empezando con WPF y no se como poder transportar o copiar diferentes archivos o musica o videos a nuestro programa, siendo que no esta en el mismo, y posteriormente se encuentre en el mismo , no se si me dehjo entender.
    estoy desarrollando un juego que se utiliza videos musicales, y quisiera q el jugador suba los viodeos que prefiera, y esots ya se queden guardados en el programa. no se como puedo copiarlos hasta mi programa
    porfa estoy en apuros, sin eso no funcionaria mi programa
    miles de gracias
    un beso
    meli

  2. Pingback: Copiando un archivo a una carpeta « Héctor Uriel Pérez Rojas Weblog

Deja un comentario

Tu dirección de correo electrónico no será publicada.