网站服务搭建,c4d培训,宁波seo网络优化公司,网站的百度词条怎么做Windows Phone 7实现图片数据绑定 首先我们使用ListBox来显示多张图片#xff0c;然后在建立一个单独的页面来显示单独的一张图片。 1.我们建立一个Picture.xaml的页面#xff0c;并使用ListBox控件来显示多张图片的信息。#xff0c;示例代码如下#xff1a; Grid x:N… Windows Phone 7实现图片数据绑定 首先我们使用ListBox来显示多张图片然后在建立一个单独的页面来显示单独的一张图片。 1.我们建立一个Picture.xaml的页面并使用ListBox控件来显示多张图片的信息。示例代码如下 Grid x:NameContentPanel Grid.Row1 Margin12,0,12,0 !--先添加一个StackPanel 用来存放listbox控件和其他元素-- StackPanel OrientationVertical !--添加一个listbox控件,并添加两个元素一个是Image控件另一个是TextBlock控件-- ListBox Height520 NamelstPicture Width450SelectionChangedlstPicture_SelectionChanged ListBox.ItemTemplate DataTemplate StackPanel OrientationHorizontal StackPanel OrientationHorizontal !--这里的StackPanel 可以看做是用来提供数据模板,即每一个ListboxItem的内容显示方式-- Image Source{Binding Image} Width100 StretchUniformHorizontalAlignmentCenter / TextBlock Text{Binding Filename}TextWrappingWrap / /StackPanel /DataTemplate /ListBox.ItemTemplate /ListBox /StackPanel /Grid 上面的代码中我们在DataTemplate标记中定义了两个控件分别为Image控件TextBlock控件那么每一个Listbox的元素即ListBoxItem都包含两个内容一个是图片(Image)一个是文本(TextBlock). 同时我们将Image 空间的Source绑定到了Image属性将TextBlock的Text绑定到Filename属性。接着便是将ListBox控件绑定到一个集合该集合包含两个元素一个是Image(即图片)另一个是string即(TextBlock的值)。我们想实现的功能是当集合中的内容发生改变时也能及时的更新到ListBox中。即数据绑定引擎接收到集合内容发生改变时需要触发CollectionChanged事件。 C#中已经定义了如下事件 event NotifyCollectionChangedEventHandler CollectionChanged; 这个集合的实现应该是集合的每一个改变添加/编辑/移除集合的成员程序顺序等都会触发事件。这个事件被定义到INotifyCollectionChanged 接口中。为使数据绑定能自动更新到集合因此需要创建自己的集合并实现这个接口。在Silverlight类库中提供的集合已经实现了这个街口。Silverlight提供了两个类/集合并实现了接口ObservableCollectionT和ReadOnlyObservableCollectionT。 ObservableCollection -代表了一个动态数据集。它会为集合中的项发生添加移除或者整个列表被刷新等情况时提供通知。 ReadOnlyObservableCollection -代表了一个只读的ObservableCollection类。 两个类中的数据绑定机制会对更新已经绑定到集合的对象时所触发的事件做出响应。 下面我们添加一个Photo类该类继承自接口INotifyCollectionChanged。 1 usingSystem.Windows.Media.Animation; 2 using System.Windows.Shapes; 3 using System.Windows.Media.Imaging; 4 using System.ComponentModel; 5 namespace WindowsPhoneNavigation.Misc 6 { 7 public class Photo : INotifyPropertyChanged 8 { 9 private string _Filename; 10 public string Filename 11 { 12 get { return _Filename; } 13 set 14 { 15 _Filename value; 16 NotifyPropertyChanged(Filename); 17 } 18 } 19 private BitmapImage _Image; 20 public BitmapImage Image 21 { 22 get { return _Image; } 23 set 24 { 25 _Image value; 26 NotifyPropertyChanged(Image); 27 } 28 } 29 private void NotifyPropertyChanged(string propertyName) 30 { 31 if (null ! PropertyChanged) 32 PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 33 } 34 public event PropertyChangedEventHandler PropertyChanged; 35 } 36 } Photo有两个属性一个是Image,一个是Filename.该类的作用是存储每一个图片的信息即Image图像和名称。同时当Photo类的属性发生改变时都会触发PropertyChanged事件。 接着我们需要添加一个类该类用来获取项目的Image图片资源。我们把这个类叫做Utils,代码如下 1 using System; 2 using System.Net; 3 using System.Windows; 4 using System.Windows.Controls; 5 using System.Windows.Documents; 6 using System.Windows.Ink; 7 using System.Windows.Input; 8 using System.Windows.Media; 9 using System.Windows.Media.Animation; 10 using System.Windows.Shapes; 11 using System.Windows.Media.Imaging; 12 using System.Windows.Resources; 13 namespace WindowsPhoneNavigation.Misc 14 { 15 public static class Utils 16 { 17 public static BitmapImage GetImage(string filename) 18 { 19 string imgLocation Application.Current.Resources[ImagesLocation].ToString();//ImagesLocation为在App.xaml中定义的资源表示路径代码如下 20 // system:String x:KeyImagesLocationResouces/Pictures//system:String 21 StreamResourceInfo imageResource Application.GetResourceStream(new Uri(imgLocation filename, UriKind.Relative));//获取图像信息数据 22 BitmapImage image new BitmapImage();//定义一个图像类型的变量 23 image.SetSource(imageResource.Stream); 24 return image; 25 //将获取的图像数据赋给该图像变量并返回该图像 26 } 27 } 28 } 之后我们在Picture.xaml.cs中声明一个名字叫做photos的 ObservableCollection类的集合,代码如下 ObservableCollection Photo photos new ObservableCollectionPhoto(); 该集合的元素类型是Photo类型。 剩下的工作便是为这个集合添加内容我们声明一个InitializePhotos的方法添加以下的图片 1 private void InitializePhotos() 2 { 3 photos.Add(new Photo() { Filename Desert.jpg, Image Utils.GetImage(Desert.jpg) }); 4 photos.Add(new Photo() { Filename Field.jpg, Image Utils.GetImage(Field.jpg) });//获取相对路径下的图像资源添加到集合中。 5 photos.Add(new Photo() { Filename Flower.jpg, Image Utils.GetImage(Flower.jpg) }); 6 photos.Add(new Photo() { Filename Hydrangeas.jpg, Image Utils.GetImage(Hydrangeas.jpg) }); 7 photos.Add(new Photo() { Filename Jellyfish.jpg, Image Utils.GetImage(Jellyfish.jpg) }); 8 photos.Add(new Photo() { Filename Koala.jpg, Image Utils.GetImage(Koala.jpg) }); 9 photos.Add(new Photo() { Filename Leaves.jpg, Image Utils.GetImage(Leaves.jpg) }); 10 photos.Add(new Photo() { Filename Lighthouse.jpg, Image Utils.GetImage(Lighthouse.jpg) }); 11 photos.Add(new Photo() { Filename Penguins.jpg, Image Utils.GetImage(Penguins.jpg) }); 12 photos.Add(new Photo() { Filename Rocks.jpg, Image Utils.GetImage(Rocks.jpg) }); 13 } 添加完成后需要将ListBox的ItemSource绑定到该集合 lstPicture.ItemsSource photos; 以上过程可在Picture.xaml初始化的时候完成即 public Picture() { InitializeComponent(); InitializePhotos(); lstPicture.ItemsSource photos; } 以上的工作完成以后便可以在ListBox中显示我们所添加进去的图像了。 总结 以上部分只说明如何绑定图像资源到ListBox控件之中我们使用的方法是首先声明一个集合该集合为我们自己定义的Photo类型它包含两个属性一个是Image,指定为图像资源另一个为String类型的Filename,用来显示图像的名称注意之前我们已经将ListBix控件中DataTemplate类的两个控件分别绑定到了Image,和Filename属性因此Photo类的另一个作用就是当Photo类型的属性发生改变时及时的通知数据绑定引擎从而使得ListBox中的图像信息得到及时的更新。为了向集合中添加图像资源我们声明了一个叫做Utils的类该类的作用就是从项目的资源文件中读取图像类型的数据实际上是我们指定了图像所在的路径使用该类的GetImage方法返回指定路径的图像数据。。以上便是整个数据绑定的过程为自己的个人理解不正确的地方请指正。 效果图 转载于:https://blog.51cto.com/potential/1402579