0

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

所以它应该是图片中的内容:http: //blog.xamarin.com/wp-content/uploads/2012/02/wp2.png

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

4

1 回答 1

1

嗯,这很容易。您使用 ListBox 将 ItemsPanel 设置为 WrapPanel,然后将 ItemsSource 绑定到 ObservableCollection(或 List/Array,但 ObservableCollection 更适合绑定)。

有多种方法可以做到这一点让我们采取最简单的方法。在 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 是一个包含所有已保存图像 url 的列表。

这基本上就是我在某些应用程序中使用的(尽管我使用 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);

提供图像是ObservableCollection<BitmapImage>您设置为 ListBox 的 ItemsSource。

与上面的链接结合使用时,这现在几乎是您可以正常工作的应用程序了。

于 2013-06-23T13:58:04.600 回答