星辰.Net技术社区论坛

首页 » .NET » Silverlight » 在Silverlight2(beta2)中读取指定URL图片包数据
admin - 2008-6-17 9:22:00
在silverlight开发,允许我们获取指定URL压缩包(zip)并读取其中的图片文件。而实现这个功能也›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
非常简单。下面是运行效果图:›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
                  ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
    ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
      首先,我们需要建立一个silverligth application ,名称为:DownLoadImg.›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
    ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
      下面就是相应的page.xaml代码:    ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
<Grid x:Name="LayoutRoot" Background="White">›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
<Grid.RowDefinitions>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<RowDefinition Height="250" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<RowDefinition Height="100" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<RowDefinition Height="50" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
</Grid.RowDefinitions>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
<StackPanel Grid.Row="1">›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<ListBox x:Name="ImageList"/>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<Button x:Name="Download" Click="StartDownLoad" Content="下载该图片"/>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
</StackPanel>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
<StackPanel Grid.Row="0">            ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<ScrollViewer HorizontalScrollBarVisibility="Auto" >›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
<Image x:Name="ImgToFill" >          ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
</Image>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
</ScrollViewer>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
</StackPanel>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
<StackPanel Grid.Row="2">›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
<Canvas Canvas.Top="70" >›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
<Rectangle  Name="progressRectangle" Height="10" Width="0" Fill="AliceBlue" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
<Rectangle Height="12"  Width="202" StrokeThickness="1" Stroke="Black" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
<TextBlock x:Name="progressText" Canvas.Left="210" Text="0%" FontSize="12" />›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
</Canvas>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
</StackPanel>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
</Grid>›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
    接下来是page.xaml.cs(相关内容见注释):
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Collections.Generic;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Linq;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Net;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Controls;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Documents;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Input;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Media;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Media.Animation;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Shapes;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.IO;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Resources;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
using System.Windows.Media.Imaging;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
namespace DownLoadImg›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
{›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
   
public partial class Page : UserControl›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
    {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        WebClient wc
= new WebClient();›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
public Page()›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            InitializeComponent();›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
this.Loaded += new RoutedEventHandler(Page_Loaded);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
//加载图片列表数据›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        void Page_Loaded(object sender, RoutedEventArgs e)›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImageList.Items.Add(
"1.jpg");›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImageList.Items.Add(
"2.png");›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
//实例化下载设置›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        void StartDownLoad(object o, EventArgs e)›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//初始化相应控件信息›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImgToFill.Visibility = Visibility.Collapsed;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            progressRectangle.Width
= 0;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            progressText.Text
= "0%";›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//绑定下载过程中处理的事件›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            wc.DownloadProgressChanged
+= new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//开始异步读取压缩包中的文件信息›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            wc.OpenReadAsync(new Uri("img.zip", UriKind.Relative), ImageList.SelectedItem);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        ›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
         
//实例化流资源信息,准备获取其中的图片数据›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            StreamResourceInfo sri = new StreamResourceInfo(e.Result as Stream, null);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//要读取的图片路径信息›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            String sURI = e.UserState as String;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//从流资源中获取指定的URL图片流信息›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            StreamResourceInfo imageStream = Application.GetResourceStream(sri, new Uri(sURI, UriKind.Relative));›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            BitmapImage imgsrc
= new BitmapImage();›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//绑定该URL图片信息并进行显示›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            imgsrc.SetSource(imageStream.Stream);›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImgToFill.Source
= imgsrc;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImgToFill.Visibility
= Visibility.Visible;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            ImgToFill.Stretch
= Stretch.Fill;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
       
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        {›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
           
//下载过程中的进度显示›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            progressText.Text = e.ProgressPercentage.ToString() + "%";›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
            progressRectangle.Width
= (double)e.ProgressPercentage * 2;›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
        }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
    }›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
}›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ
›T Õ^›¡.gwww.netcsharp.cnõªP­ß‰xѧ

附件: silverlight_downloadimg.rar
1
查看完整版本: 在Silverlight2(beta2)中读取指定URL图片包数据