有谁知道如何制作包含多个图像的列表框。我希望能够捕获图像然后在屏幕上显示,然后捕获另一个图像并在第一个之后显示,依此类推。它基本上是我想要创建的图像库页面。我想将它们存储在手机的某个位置,以便在应用程序再次运行时可以检索它们。
所以它应该像图片中那样:http://blog.xamarin.com/wp-content/uploads/2012/02/wp2.png
提前谢谢你,我一直在研究它但找不到任何东西。
答案 0 :(得分:1)
嗯,这很容易。您使用ListBox将ItemsPanel设置为WrapPanel,并将ItemsSource绑定到ObservableCollection(或List / Array,但ObservableCollection更适合Bindings)。
有多种方法可以做到这一点 让我们采取最简单的方法。在xaml中,您定义了ListBox:
<ListBox x:Name="listbox">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="5"
Background="{StaticResource PhoneChromeBrush}"
Height="180"
Width="180">
<Image Source="{Binding}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在您的代码中,您可以使用以下内容加载图像:
ObservableCollection<BitmapImage> images = new ObservableCollection<BitmapImage>();
List<String> bitmapuris = ....
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
foreach(var bitmapuri in bitmapuris)
{
System.Windows.Media.Imaging.BitmapImage bitmap = new System.Windows.Media.Imaging.BitmapImage();
if (isoStore.FileExists(bitmapuri))
{
using (IsolatedStorageFileStream stream = isoStore.OpenFile(bitmapuri, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
bitmap.CreateOptions = System.Windows.Media.Imaging.BitmapCreateOptions.BackgroundCreation;
bitmap.SetSource(stream);
}
}
images.Add(bitmap);
}
}
listbox.ItemsSource = images;
使用bitmapuris作为包含所有已保存图像网址的列表。
这基本上就是我在我的一些应用程序中使用的内容(虽然我使用ViewModels和Bindings而不是手动设置ItemsSource)
希望这有帮助
编辑: 关于如何捕获和保存图像,您可以阅读本文: http://www.c-sharpcorner.com/UploadFile/mahakgupta/capture-save-and-edit-image-in-windows-phone-7/
我会将图像保存在特定文件夹中,即“/ Images /”。通过这种方式,您可以加载您之前在应用上捕获的所有图片,并使用此方法设置的List<String> bitmapuris
上面的代码开始:
List<String> getFiles(String folderpath)
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
return storage.GetFileNames(folderpath).ToList();
}
喜欢这个List<String> bitmapuris = getFiles("/Images/*");
当您捕获图像时,您可以通过以下方式将图像简单地添加到ListBox中:
System.Windows.Media.Imaging.BitmapImage bitmap = new System.Windows.Media.Imaging.BitmapImage();
bitmap.CreateOptions = System.Windows.Media.Imaging.BitmapCreateOptions.BackgroundCreation;
bitmap.SetSource(myimagestream);
images.Add(bitmap);
提供图像是您设置为ListBox的ItemsSource的ObservableCollection<BitmapImage>
。
现在,这几乎是您完全正常工作的应用程序,当使用上面的链接时。