欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Windows Phone Pivot 模拟 滑动Image Viewer 出现 0x8000ffff 异常

程序员文章站 2022-04-30 20:01:00
简介:   app有多张图片需要展示,打算做一个 类似于 “图片”里面可以滑动的 图片展示页面。   实现的方式有很多。选个简单的,直接用pivot来模拟...
简介:

  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;  

       }