ListBox与多个捕获的图像windows手机

时间:2013-06-22 23:49:53

标签: windows-phone-7 windows-phone-8 windows-phone image-gallery listboxitem

有谁知道如何制作包含多个图像的列表框。我希望能够捕获图像然后在屏幕上显示,然后捕获另一个图像并在第一个之后显示,依此类推。它基本上是我想要创建的图像库页面。我想将它们存储在手机的某个位置,以便在应用程序再次运行时可以检索它们。

所以它应该像图片中那样:http://blog.xamarin.com/wp-content/uploads/2012/02/wp2.png

提前谢谢你,我一直在研究它但找不到任何东西。

1 个答案:

答案 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>

现在,这几乎是您完全正常工作的应用程序,当使用上面的链接时。