分享一个网络图片控件(WebImage for wp8)
来源:互联网 发布:宁皓网 知乎 编辑:程序博客网 时间:2024/05/18 20:07
闲话不多说,直接上代码!!!转载请附上原作者地址哦!!!thx!!!
WebImage.xaml页面代码如下:
<UserControl x:Class="WpDemo.Controls.WebImage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" d:DesignHeight="480" d:DesignWidth="480"> <Grid x:Name="LayoutRoot"> <Image x:Name="ImgShow" Stretch="UniformToFill" Visibility="Collapsed"/> <Grid x:Name="gdWait"> <Rectangle x:Name="rectProgress" Fill="#FFFFB3E0" Stroke="Black" VerticalAlignment="Bottom"/> <TextBlock x:Name="tbProgress" HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Center" Foreground="White" Text="0"/> </Grid> </Grid></UserControl>WebImage.xaml.cs类如下:
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Navigation;using Microsoft.Phone.Controls;using Microsoft.Phone.Shell;using System.Windows.Media;using System.Windows.Media.Imaging;using System.ComponentModel;using System.IO;namespace WpDemo.Controls{ public partial class WebImage : UserControl { private static String CacheFolder = "cloud_cache_image"; private BitmapImage _imgSource = null; public static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(ImageSource), typeof(WebImage), null); public static readonly DependencyProperty StretchProperty = DependencyProperty.Register("Stretch", typeof(Stretch), typeof(WebImage), new PropertyMetadata(Stretch.UniformToFill)); public static readonly DependencyProperty ImgUriProperty = DependencyProperty.Register("ImgUri", typeof(string), typeof(WebImage), new PropertyMetadata("", OnImgUriChanged)); private string _ImgUri; public ImageSource Source { get { return ImgShow.Source; } set { ImgShow.SetValue(Image.SourceProperty, value); } } public Stretch Stretch { get { return ImgShow.Stretch; } set { ImgShow.SetValue(Image.StretchProperty, value); } } public string ImgUri { get { return _ImgUri; } set { _ImgUri = value; SetImgSource(_ImgUri); } } void SetImgSource(string uri) { string cacheName = Path.Combine(CacheFolder, ParseUri(uri)); _imgSource = new BitmapImage(); _imgSource.ImageOpened += imgSource_ImageOpened; if (IsolatedStorageFileHelper.FileExists(cacheName)) { using (Stream stream = IsolatedStorageFileHelper.OpenFile(cacheName)) { _imgSource.SetSource(stream); ; } ImgShow.Visibility = System.Windows.Visibility.Visible; gdWait.Visibility = System.Windows.Visibility.Collapsed; } else { _imgSource.DownloadProgress += imgSource_DownloadProgress; _imgSource.ImageFailed += imgSource_ImageFailed; _imgSource.UriSource = new Uri(uri, UriKind.Absolute); } ImgShow.Source = _imgSource; } void imgSource_ImageFailed(object sender, ExceptionRoutedEventArgs e) { _imgSource.ImageOpened -= imgSource_ImageOpened; _imgSource.ImageFailed -= imgSource_ImageFailed; _imgSource.DownloadProgress -= imgSource_DownloadProgress; } void imgSource_ImageOpened(object sender, RoutedEventArgs e) { ImgShow.Visibility = System.Windows.Visibility.Visible; gdWait.Visibility = System.Windows.Visibility.Collapsed; BitmapImage img = (BitmapImage)sender; WriteableBitmap wb = new WriteableBitmap(img); using (Stream stream = IsolatedStorageFileHelper.CreateFile(Path.Combine(CacheFolder, ParseUri(img.UriSource.AbsoluteUri)))) { wb.SaveJpeg(stream, img.PixelWidth, img.PixelHeight, 0, 100); } _imgSource.ImageOpened -= imgSource_ImageOpened; _imgSource.ImageFailed -= imgSource_ImageFailed; _imgSource.DownloadProgress -= imgSource_DownloadProgress; } void imgSource_DownloadProgress(object sender, DownloadProgressEventArgs e) { rectProgress.Height = gdWait.ActualHeight * (e.Progress / 100.0); tbProgress.Text = e.Progress.ToString(); _imgSource.DownloadProgress -= imgSource_DownloadProgress; } public WebImage() { InitializeComponent(); } private static void OnImgUriChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { WebImage img = obj as WebImage; img.ImgUri = e.NewValue as string; } private string ParseUri(string uri) { return uri.Replace("://", "").Replace("/", "_"); } }}
using System;using System.Collections.Generic;using System.IO.IsolatedStorage;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Serialization;namespace WpDemo.Common{ public class IsolatedStorageFileHelper { private static IsolatedStorageFile _Store = null; private static IsolatedStorageFile Store { get { if (_Store == null) { _Store = IsolatedStorageFile.GetUserStoreForApplication(); } return _Store; } } public static void CreateFolder(string dir) { if (Store.DirectoryExists(dir)) return; Store.CreateDirectory(dir); } public static void DeleteFolder(string dir) { if (Store.DirectoryExists(dir)) return; Store.DeleteDirectory(dir); } public static void DeleteFile(string path) { if (!Store.FileExists(path)) return; Store.DeleteFile(path); } public static IsolatedStorageFileStream CreateFile(string path) { string[] parts = path.Split('\\'); string dir = ""; for (int i = 0; i < parts.Length - 1; i++) { string part = parts[i]; dir = System.IO.Path.Combine(dir, part); if (!Store.DirectoryExists(dir)) Store.CreateDirectory(dir); } return Store.CreateFile(path); } public static bool FileExists(string path) { return Store.FileExists(path); } public static IsolatedStorageFileStream OpenFile(string path) { return Store.OpenFile(path, System.IO.FileMode.Open); } public static void SerializeObject(object obj, string path) { if (Store.FileExists(path)) Store.DeleteFile(path); XmlSerializer xml = new XmlSerializer(obj.GetType()); using (var stream = CreateFile(path)) { xml.Serialize(stream, obj); } } public static T DeSerializeObject<T>(string path) { if (!Store.FileExists(path)) return default(T); XmlSerializer xml = new XmlSerializer(typeof(T)); object obj = null; using (var stream = OpenFile(path)) { obj = xml.Deserialize(stream); } return (T)obj; } }}
用法如下:
xmlns:MyControl="clr-namespace:CloudWpDemo.Controls"
<StackPanel Grid.Column="0" Width="200"> <MyControl:WebImage ImgUri="{Binding Img_url}" Margin="5,5,5,5"></MyControl:WebImage> <!--<Image Source="{Binding Img_url}"></Image> <TextBlock Text="{Binding Name}"></TextBlock>--> </StackPanel>
我测试过蛮多次。。。。此控件挺好用的!!!希望对你的开发有用!!!!
- 分享一个网络图片控件(WebImage for wp8)
- 分享一个日历控件
- wp8 系统控件详解
- wp8自定义控件 进度条
- wp8自定义控件
- 微信分享网络图片
- 一个图片广告控件
- 分享一个网络虚拟人
- WP8 ApplicationBarIconButton控件的使用
- wp8动态加载xaml控件
- WP8.1的Flyout控件
- WP8.1的Flyout控件
- WP8图片内存BUG解决办法
- 【WP8】简单介绍wp8中原生LongListSelector控件的用法
- Android 图片控件Fresco加载网络图片
- WP8 联系人开发总结与分享
- 自定义一个基于Volley NetworkImageView的圆形带网络请求功能的图片控件
- 【ShareSDK社会化分享】新浪微博分享网络图片问题
- Collections(集合操作的工具类)&集合的同步控制&不可变集合的设置
- HDU-1671-Phone List
- spring—容器启动载入bean过程
- uva 699 The Falling Leaves dfs实现
- 逆向iOS SDK -- _UIImageAtPath 的实现(SDK 6.1)
- 分享一个网络图片控件(WebImage for wp8)
- uva 133 The Dole Queue 双向约瑟夫环 模拟实现
- javapoi读写数据 excel
- ruby+python
- poj 1696 Space Ant
- C/C++ 取整函数ceil(),floor()
- HDU-1672-Cuckoo Hashing
- Java基础之Hello World
- 2013年暑假队内选拔赛题解2