<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="250" />
<RowDefinition Height="100" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="1">
<ListBox x:Name="ImageList"/>
<Button x:Name="Download" Click="StartDownLoad" Content="下载该图片"/>
</StackPanel>
<StackPanel Grid.Row="0">
<ScrollViewer HorizontalScrollBarVisibility="Auto" >
<Image x:Name="ImgToFill" >
</Image>
</ScrollViewer>
</StackPanel>
<StackPanel Grid.Row="2">
<Canvas Canvas.Top="70" >
<Rectangle Name="progressRectangle" Height="10" Width="0" Fill="AliceBlue" />
<Rectangle Height="12" Width="202" StrokeThickness="1" Stroke="Black" />
<TextBlock x:Name="progressText" Canvas.Left="210" Text="0%" FontSize="12" />
</Canvas>
</StackPanel>
</Grid>
接下来是page.xaml.cs(相关内容见注释):
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.IO; using System.Windows.Resources; using System.Windows.Media.Imaging; namespace DownLoadImg { public partial class Page : UserControl { WebClient wc = new WebClient(); public Page() { InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded); } //加载图片列表数据 void Page_Loaded(object sender, RoutedEventArgs e) { ImageList.Items.Add("1.jpg"); ImageList.Items.Add("2.png"); } //实例化下载设置 void StartDownLoad(object o, EventArgs e) { //初始化相应控件信息 ImgToFill.Visibility = Visibility.Collapsed; progressRectangle.Width = 0; progressText.Text = "0%"; //绑定下载过程中处理的事件 wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged); //开始异步读取压缩包中的文件信息 wc.OpenReadAsync(new Uri("img.zip", UriKind.Relative), ImageList.SelectedItem); } void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { //实例化流资源信息,准备获取其中的图片数据 StreamResourceInfo sri = new StreamResourceInfo(e.Result as Stream, null); //要读取的图片路径信息 String sURI = e.UserState as String; //从流资源中获取指定的URL图片流信息 StreamResourceInfo imageStream = Application.GetResourceStream(sri, new Uri(sURI, UriKind.Relative)); BitmapImage imgsrc = new BitmapImage(); //绑定该URL图片信息并进行显示 imgsrc.SetSource(imageStream.Stream); ImgToFill.Source = imgsrc; ImgToFill.Visibility = Visibility.Visible; ImgToFill.Stretch = Stretch.Fill; } void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { //下载过程中的进度显示 progressText.Text = e.ProgressPercentage.ToString() + "%"; progressRectangle.Width = (double)e.ProgressPercentage * 2; } } } |