Silverlight 3 - SaveFileDialog

Vamos a mostrar de que manera podemos utilizar el nuevo control para abrir un cuadro de dialogo que nos permita selecciona donde guardar un archivo en la máquina del cliente.

La manera de utilizarlo es muy similar al control OpenFileDialog que ya estaba disponible en Silverlight 2.

Primero vamos a agregar en el XAML un control TextBox donde vamos a escribir algo que luego grabaremos en un archivo de texto.

<StackPanel>
 
    <TextBlock Text="Cargar un texto para grabar en un archivo TXT." />
    <TextBox x:Name="textSave" Height="250" 
             VerticalScrollBarVisibility="Visible"
             HorizontalScrollBarVisibility="Auto" 
             AcceptsReturn="True">
    </TextBox>
 
    <Button x:Name="botonSave" Width="100" Height="20"   
            Content="Grabar Archivo" 
            Click="botonSave_Click"   
            Canvas.Top="10" 
            Canvas.Left="10">            
    </Button>
    <TextBlock x:Name="errorSave" 
               Canvas.Top="40" 
               Canvas.Left="10">
    </TextBlock>
 
</StackPanel>

SFD0

Ahora vamos a codificar el evento del botón que grabará el archivo. Tenemos que crear un objeto SaveFileDialog que es el que nos permitirá abrir un cuadro de dialogo para grabar archivos.

private void botonSave_Click(object sender, RoutedEventArgs e)
{
    SaveFileDialog dialogSave = new SaveFileDialog();
 
    try
    {
        dialogSave.DefaultExt = ".txt";
        dialogSave.Filter = "Archivos de Texto|*.txt|All Files|*.*";
        dialogSave.FilterIndex = 2;
    }
    catch (Exception ex)
    {
        errorSave.Text = 
            "Error al configurar el control SaveFileDialog: " + 
            ex.Message;
    }
 
    if (dialogSave.ShowDialog() == true)
    {
        try
        {
            using (Stream stream = dialogSave.OpenFile())
            {
                byte[] fileByte = 
                    (new UTF8Encoding(true)).GetBytes(textSave.Text);
                stream.Write(fileByte, 0, fileByte.Length);
                stream.Close();
            }
        }
        catch (Exception ex)
        {
            errorSave.Text = "Error al grabar el archivo: " + ex.Message;
        }
    }
}

Vamos revisar un poco el código, para entender mejor de que manera lo utilizamos.

Para crear un objeto utilizamos el constructor, luego tenemos algunas propiedades que nos definen que tipo de archivo vamos a guardar.

  • DefaultExt. Es la extensión por defecto que agregará al nombre del archivo, si no se especifica alguna. 
  • Filter. Especifica los tipos de archivos que podrá elegir el usuario.
  • FilterIndex. El tipo de archivo que aparecerá por defecto al abrir el cuadro.

El método ShowDialog() es que abre el cuadro, vemos como queda al abrirlo.

SFD1

Este método devuelve true o false, según elegimos o no archivo para guardar.

El método OpenFile nos permite crear un Stream donde vamos a agregar los bytes que queremos guardar.

De esta manera, podemos guardar archivos en la máquina del cliente, permitiendo que este seleccione el nombre y ubicación del mismo.

Pueden descargar el proyecto aquí.

No Comments