一共两个页面,第一个为MainPage.xaml,代码如下:
1 <!--ContentPanel - place additional content here--> 2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 3 <Image Name="PhotoImage" Height="342" HorizontalAlignment="Left" Margin="9,6,0,0" Stretch="Fill" VerticalAlignment="Top" Width="441"/> 4 <Button Name="SaveButton" Click="SaveButton_Click" Content="保存" Height="72" HorizontalAlignment="Left" Margin="7,482,0,0" VerticalAlignment="Top" Width="441"> 5 <Button.Background> 6 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 7 <GradientStop Color="Black" Offset="0"/> 8 <GradientStop Color="#FFEB1818" Offset="1"/> 9 </LinearGradientBrush> 10 </Button.Background> 11 </Button> 12 <TextBlock Height="30" HorizontalAlignment="Left" Margin="27,442,0,0" Name="textBlock1" Text="输入照片名:" FontSize="25" VerticalAlignment="Top"/> 13 <TextBox Name="PhotoName" Height="72" HorizontalAlignment="Left" Margin="165,424,0,0" Text="" VerticalAlignment="Top" Width="284"> 14 <TextBox.Background> 15 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 16 <GradientStop Color="Black" Offset="0"/> 17 <GradientStop Color="#FFD01818" Offset="1"/> 18 </LinearGradientBrush> 19 </TextBox.Background> 20 </TextBox> 21 <Button Name="TakePhotoButton" Click="TakePhotoButton_Click" Content="拍照" Height="72" Margin="9,366,8,0" VerticalAlignment="Top"> 22 <Button.Background> 23 <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 24 <GradientStop Color="Black" Offset="0"/> 25 <GradientStop Color="#FFD61212" Offset="1"/> 26 </LinearGradientBrush> 27 </Button.Background> 28 </Button> 29 </Grid> 30 </Grid> 31 32 <!--Sample code showing usage of ApplicationBar--> 33 <phone:PhoneApplicationPage.ApplicationBar> 34 <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 35 <shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.search.rest.png" Text="查看" Click="ApplicationBarIconButton_Click"/> 36 </shell:ApplicationBar> 37 </phone:PhoneApplicationPage.ApplicationBar>
后台代码如下:
MainPage.xaml.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Documents; 8 using System.Windows.Input; 9 using System.Windows.Media; 10 using System.Windows.Media.Animation; 11 using System.Windows.Shapes; 12 using Microsoft.Phone.Controls; 13 using Microsoft.Phone.Tasks; 14 using Microsoft.Phone; 15 using System.IO; 16 using System.IO.IsolatedStorage; 17 18 namespace 在隔离存储中存取照片 19 { 20 public partial class MainPage : PhoneApplicationPage 21 { 22 // Constructor 23 string filename; 24 byte[] _imageAsByte; 25 public MainPage() 26 { 27 InitializeComponent(); 28 } 29 30 private void SaveButton_Click(object sender, RoutedEventArgs e) 31 { 32 filename = PhotoName.Text; 33 if (filename != ""&&PhotoImage.Source!=null) 34 { 35 using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 36 { 37 if (!store.FileExists(filename) || store.FileExists(filename) && MessageBox.Show("Overwrite the file?", "Question", MessageBoxButton.OKCancel) == MessageBoxResult.OK) 38 { 39 using (var stream = store.CreateFile(filename)) 40 { 41 stream.Write(_imageAsByte, 0, _imageAsByte.Length); 42 } 43 PhotoImage.Source = null; 44 PhotoName.Text = ""; 45 NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative)); 46 } 47 } 48 } 49 else 50 { 51 MessageBox.Show("Sorry,but you must take a photo and write the photo's name in the textbox!","Warning!",MessageBoxButton.OK); 52 } 53 } 54 55 private void TakePhotoButton_Click(object sender, RoutedEventArgs e) 56 { 57 CameraCaptureTask task = new CameraCaptureTask(); 58 task.Completed += new EventHandler<PhotoResult>(task_Completed); 59 task.Show(); 60 } 61 62 void task_Completed(object sender, PhotoResult e) 63 { 64 if (e.TaskResult == TaskResult.OK) 65 { 66 _imageAsByte = new byte[e.ChosenPhoto.Length]; 67 e.ChosenPhoto.Read(_imageAsByte, 0, _imageAsByte.Length); 68 e.ChosenPhoto.Seek(0, SeekOrigin.Begin); 69 this.PhotoImage.Source = PictureDecoder.DecodeJpeg(e.ChosenPhoto); 70 } 71 } 72 73 private void ApplicationBarIconButton_Click(object sender, EventArgs e) 74 { 75 NavigationService.Navigate(new Uri("/Page1.xaml",UriKind.Relative)); 76 } 77 } 78 }
效果如图所示:
同时还新建了一个照片文件的类,从IsolatedStorage里读取出照片及照片名再绑定到Page1.xaml中的ListBox中。类代码如下:
PhotoFile.cs 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 12 namespace 在隔离存储中存取照片 13 { 14 public class PhotoFile 15 { 16 public ImageSource Image { get; set; } 17 public string ImageName { get; set; } 18 } 19 }
第二个Page1.xaml,代码如下:
1 <!--ContentPanel - place additional content here--> 2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 3 <ListBox Height="550" HorizontalAlignment="Left" Margin="6,6,0,0" Name="listBox1" VerticalAlignment="Top" Width="460"> 4 <ListBox.ItemTemplate> 5 <DataTemplate> 6 <Grid Margin="{StaticResource PhoneTouchTargetOverhang}"> 7 <StackPanel Orientation="Horizontal"> 8 <Image Source="{Binding Image}" Width="130" Height="120" Stretch="Fill"/> 9 <TextBlock Text="{Binding ImageName}" Foreground="Coral" FontSize="32" TextWrapping="Wrap" Width="300"/> 10 </StackPanel> 11 </Grid> 12 </DataTemplate> 13 </ListBox.ItemTemplate> 14 </ListBox> 15 </Grid> 16 </Grid> 17 18 <!--Sample code showing usage of ApplicationBar--> 19 <phone:PhoneApplicationPage.ApplicationBar> 20 <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 21 <shell:ApplicationBarIconButton IconUri="/Images/appbar.add.rest.png" Text="添加" Click="ApplicationBarIconButton_Click"/> 22 </shell:ApplicationBar> 23 </phone:PhoneApplicationPage.ApplicationBar>
后台代码:
Page1.xaml.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Documents; 8 using System.Windows.Input; 9 using System.Windows.Media; 10 using System.Windows.Media.Animation; 11 using System.Windows.Shapes; 12 using Microsoft.Phone.Controls; 13 using System.IO; 14 using System.IO.IsolatedStorage; 15 using System.Windows.Media.Imaging; 16 17 namespace 在隔离存储中存取照片 18 { 19 public partial class Page1 : PhoneApplicationPage 20 { 21 IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication(); 22 public Page1() 23 { 24 InitializeComponent(); 25 } 26 27 protected override void OnNavigatedTo(NavigationEventArgs e) 28 { 29 List<PhotoFile> filelist = new List<PhotoFile>(); 30 if (file.GetFileNames() != null) 31 { 32 foreach (string filename in file.GetFileNames()) 33 { 34 PhotoFile photo = new PhotoFile(); 35 BitmapImage bmp = new BitmapImage(); 36 using (IsolatedStorageFileStream filestream = file.OpenFile(filename, FileMode.Open, FileAccess.ReadWrite)) 37 { 38 bmp.SetSource(filestream); 39 filestream.Flush(); 40 filestream.Close(); 41 photo.Image = bmp; 42 photo.ImageName = " 照片名:"+filename; 43 } 44 filelist.Add(photo); 45 } 46 listBox1.ItemsSource = filelist; 47 } 48 } 49 50 private void ApplicationBarIconButton_Click(object sender, EventArgs e) 51 { 52 NavigationService.Navigate(new Uri("/MainPage.xaml",UriKind.Relative)); 53 } 54 } 55 }
运行效果如下: