Silverlight 3.0 : Uloženie obsahu do súboru na lokálnom PC

Published Thursday, November 12, 2009 8:48 AM

Aby bolo možné ukladať časti kontextu Silverlight aplikácie do súboru na lokálnom disku, pribudol vo verzii Silverlight 3 dialóg typu „Save File“. Projekt pre otestovanie tejto funkcionality bude obsahovať pole typu text Box pre zadanie textu, ktorý má byť uložený do súboru a tlačidlo pre aktiváciu ukladania:

<Grid x:Name="LayoutRoot" Background="Cyan">
	<TextBox x:Name="tbText" Height="25" Text="Vstup textu..."></TextBox>
	<Button x:Name="btUloz" Height="35" Margin="295,0,133,164" 
	VerticalAlignment="Bottom" Content="Uloz text" Click="btUloz_Click" />
</Grid>

 

Obsluha udalosti stlačenia tlačidla bude pracovať s objektom SaveFileDialog:

private void btUloz_Click(object sender, System.Windows.RoutedEventArgs e)
{
	SaveFileDialog sfdUloz = new SaveFileDialog();
       bool? sf = sfdUloz.ShowDialog();
       if (sf == true)
       {
          using (Stream fs = (Stream)sfdUloz.OpenFile())
          {
             byte[] info = (new UTF8Encoding(true)).GetBytes(tbText.Text);
             fs.Write(info, 0, info.Length);
             fs.Close();
           }
       } 
}

 

Do kódu je potrebné pridať referencie na namespace:

using System.IO;
using System.Text;

 

V prípade vopred známeho typu súboru je možné pre objekt SaveFileDialog nastaviť filter:

saveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = ".txt";
saveDialog.Filter = "Text File|*.txt|All Files|*.*";

 

V predchádzajúcom príklade bol príklad uloženia textu do súboru, pričom text bol vygenerovaný Silverlight aplikáciou, presnejšie zadaný používateľom a spracovaný Silverlight aplikáciou. V druhom typickom scenári bude do súboru uložený obsah prevzatý z webu, v tomto prípade obrázok. Ako obrázok môžete využiť Silverlight logo z URL adresy http://silverlight.net/Themes/silverlight/images/logo.jpg.

Upozornenie: Úloha sa zdá byť na prvý pohľad jednoduchá, stačí vytvoriť a aktivovať dialóg, vybrať meno súboru a uložiť ako binárny obsah. No binárny obsah je možné ukladať až vtedy, keď sa z webu načíta, čiže procedúra pre ukladanie obrázka musí byť aktivovaná až po jeho načítaní. Objekt SaveFileDialog je skonštruovaný na úrovni hlavnej triedy MainControl :UserControl, aby ho mohli využívať obidve procedúry. Procedúra Ukladanie sa aktivuje až po načítaní obsahu z webu:

using System.IO;
using System.Text;
using System.Net;

namespace SL3out
{
   public partial class MainControl : UserControl
   {
	
	SaveFileDialog sfd = new SaveFileDialog();


	public MainControl()
	{
		// Required to initialize variables
		InitializeComponent();
	}

	private void btUloz_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			sfd.DefaultExt = ".jpg";
            sfd.Filter = "JPG File|*.jpg|All Files|*.*";

            bool? open = sfd.ShowDialog();

            if (open.HasValue && open.Value)
            {
                Uri ur = new   
               Uri("http://silverlight.net/Themes/silverlight/images/logo.jpg");
                WebClient wc = new WebClient();
                wc.OpenReadAsync(ur);
               wc.OpenReadCompleted += new OpenReadCompletedEventHandler(Ukladanie);
            }
        }

        void Ukladanie(object sender, OpenReadCompletedEventArgs e)
        {
            if (!e.Cancelled)
            {
                using (Stream fs = sfd.OpenFile())
                {
                    int length = Convert.ToInt32(e.Result.Length);
                    byte[] byteResult = new byte[length];
                    e.Result.Read(byteResult, 0, length);
                    fs.Write(byteResult, 0, byteResult.Length);
                    fs.Close();
                }
            }
        }
    }
}

 

Späť na obsah

Komentáre

Bez komentárov

Tento blog

Štítky

Ešte neboli vytvorené žiadne štítky.

Predplatné