Windows Phone Pivot 模拟 滑动Image Viewer 出现 0x8000ffff 异常
app有多张图片需要展示,打算做一个 类似于 “图片”里面可以滑动的 图片展示页面。
实现的方式有很多。选个简单的,直接用pivot来模拟。
问题:
过程中出现了:0x8000ffff 异常!!!
我将 observablecollection<uri> 绑定到 itemtemplete,并且设置itemsource时候
引发0x8000ffff 异常。完全没有头绪。
使用的代码:
代码如下:
数据
[csharp]
private observablecollection<uri> _imageuris;
public observablecollection<uri> imageuris
{
get { return _imageuris; }
set
{
if (_imageuris != value)
{
_imageuris = value;
raisepropertychanged("imageuris");
}
}
}
加载数据
[csharp]
protected override void onnavigatedto(navigationeventargs e)
{
base.onnavigatedto(e);
umengsdk.umenganalytics.onpagestart("imageviewerpage");
if (phoneapplicationservice.current.state.containskey("images"))
{
object list;
if (phoneapplicationservice.current.state.trygetvalue("images", out list))
{
imageuris = list as observablecollection<uri>;
}
}
pivot.itemsource = imageuris;
}
xaml
[html]
<controls:pivot title="查看图片"
name="pivot" >
<controls:pivot.itemtemplate>
<datatemplate >
<image source="{binding}" />
</datatemplate>
</controls:pivot.itemtemplate>
<controls:pivot.headertemplate>
<datatemplate >
<grid>
<textblock margin="0,0,1,0"
textwrapping="wrap"
d:layoutoverrides="width, height" />
</grid>
</datatemplate>
</controls:pivot.headertemplate>
</controls:pivot>
解决问题:
1.找了2 3个小时,开始以为是staticsresources的问题。网上有说法是绑定名字出错,但是经过检查,
没有错误!
2.然后找到这个文章
https://www.nachmore.com/2010/silverlight-why-do-i-get-0x8000ffff-when-using-writeablebitmap-on-an-element/
silverlight: why do i get 0x8000ffff when using writeablebitmap on an element
大概是讲:强迫去render看不到的控件,会仆街。
按照这个思路,我觉得应该讲bitmapimage加载了,再绑定。
3.那就先将bitmapimage下载来咯,webclient??好像不太好
我找到这个方案:
https://blog.csdn.net/moxiaomomo/article/details/7907054
延迟加载bitmapimage
c# 改成这样:
[csharp]
public observablecollection<bitmapimage> images { get; set; }
protected override void onnavigatedto(navigationeventargs e)
{
base.onnavigatedto(e);
umengsdk.umenganalytics.onpagestart("imageviewerpage");
if (phoneapplicationservice.current.state.containskey("images"))
{
object list;
if (phoneapplicationservice.current.state.trygetvalue("images", out list))
{
imageuris = list as observablecollection<uri>;
}
}
images.clear();
foreach (var uri in imageuris)
{
bitmapimage bitmap = new bitmapimage();
bitmap.createoptions = bitmapcreateoptions.backgroundcreation;
// 当图片下载完成并解码成功时,会触发imageopened
bitmap.imageopened += (s, ex) =>
{
// 添加到图片列表
images.add(s as bitmapimage);
};
// uri为远程文件地址
bitmap.urisource = uri;
}
int index = int.parse(navigationcontext.querystring["index"]);
pivot.selectedindex = index;
pivot.itemssource = images;
}
下一篇: window phone 7 自定义控件