我从IsolatedSotrage下载了很多图片,并在StackPanel的屏幕上显示它们。当我启动应用程序时,我没有看到手机中的图像(照片不可见(为什么?!)),但是当我锁定手机并解锁时我已经完成所有图片,一切正常。
为什么会这样?
XAML:
<ScrollViewer x:Name="ScrollViewer1">
<StackPanel x:Name="myStackPanel"/>
</ScrollViewer>
C# - 将图像添加到StackPanel:
Image[] myImage = new Image[30];
for (int n = 1; n < 30; n++)
{
myImage[n] = new Image();
myImage[n].Source = getBitmap(n, "/image/");
myStackPanel.Children.Add(myImage[n]);
}
从IsolatedStorage打开图像的方法:
public BitmapImage getBitmap(int n, string path)
{
BitmapImage myBitmap = new BitmapImage();
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (store.FileExists(path + n.ToString() + ".jpg"))
{
using (var isoStream = store.OpenFile(path + n.ToString() + ".jpg", FileMode.Open, FileAccess.Read))
{
myBitmap.SetSource(isoStream);
return myBitmap;
}
}
else
{
return myBitmap= null;
}
}
}
目前我对这个问题有两个令人失望的解决方案:
当我删除ScrollViewer时,我没有任何问题,但我的图像在屏幕外。 但是当我使用网格并且我将每张图片保存在单独的网格中时,它可以工作,但加载图像需要更长的时间
Image[] myImage = new Image[30];
for (int n = 1; n < 30; n++)
{
Grid myGrid = new Grid();
myImage[n] = new Image();
myImage[n].Source = getBitmap(n, "/image/");
myGrid.Children.Add(myImage[n]);
myStackPanel.Children.Add(myGrid);
}
修改
看起来像这样:
答案 0 :(得分:2)
问题是当图像添加到StackPanel
内时,它们没有宽度或高度。您可以通过添加以下内容来验证这一点,并且图像应该是可见的(这设置为全宽):
myImage[n].Width = 480;
myImage[n].Height = (float)myBitmap.PixelHeight / myBitmap.PixelWidth * 480;
Altought我可能会建议您在ListBox
内使用StackPanel
代替ScrollViewer
。这可以通过以下XAML完成:
<ListBox x:Name="myListbox" />
更改代码以添加图像(也是在此循环中跳过索引0):
Image[] myImage = new Image[30];
for (int n = 0; n < 30; n++)
{
myImage[n] = new Image();
myImage[n].Source = getBitmap(n, "/image/");
}
myListbox.ItemsSource = myImage;
在某些情况下,您可能还需要关闭延迟创建,这可以通过在位图上设置CreateOptions
来完成。
BitmapImage myBitmap = new BitmapImage() { CreateOptions = BitmapCreateOptions.None };
答案 1 :(得分:1)
BitmapImage
发生了ImageOpened
和ImageFailed
事件。为这些事件添加处理程序并进行调试 - 查看是否正在触发ImageFailed
事件,如果是,为什么。