您的位置:首页 > 其它

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

2013-01-15 23:04 267 查看
简介:
App有多张图片需要展示,打算做一个 类似于 “图片”里面可以滑动的 图片展示页面。
实现的方式有很多。选个简单的,直接用Pivot来模拟。

问题:
过程中出现了:0x8000ffff 异常!!!
我将 ObservableCollection<Uri> 绑定到 ItemTemplete,并且设置ItemSource时候
引发0x8000ffff 异常。完全没有头绪。

使用的代码:

代码如下:
数据
private ObservableCollection<Uri> _imageUris;

public ObservableCollection<Uri> ImageUris
{
get { return _imageUris; }
set
{
if (_imageUris != value)
{
_imageUris = value;
RaisePropertyChanged("ImageUris");
}
}
}


加载数据
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);

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
<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.然后找到这个文章 http://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??好像不太好
我找到这个方案: http://blog.csdn.net/moxiaomomo/article/details/7907054
延迟加载BitmapImage

C# 改成这样:

public ObservableCollection<BitmapImage> Images { get; set; }

protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);

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;
}


咔嗒!成了!

历史
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐