2012-04-30 36 views
1

我试图将一些数据绑定到wp7列表框(含自定义项目模板),其中包括每个条目的缩略图。事情是 - 我遇到了一个问题 - 当链接的图像重定向到404页面时 - 我得到一个空的图像,结果坦率地说 - 我不知道如何检查加载的数据是否是正确的图像...这里是我现在使用的代码:wp7 - 如何检查图像是否加载

<ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Grid Height="62" 
            Width="62"> 
           <Image Stretch="UniformToFill" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center"> 

            <Image.Source> 
             <BitmapImage UriSource="{Binding MiniImage}" 
                CreateOptions="DelayCreation, BackgroundCreation" /> 
            </Image.Source> 

           </Image> 
          </Grid> 
          <StackPanel HorizontalAlignment="Center" 
             VerticalAlignment="Center"> 
           <TextBlock Text="{Binding Title}" 
              Margin="12,4,0,0" 
              FontSize="26" 
              FontFamily="Segoe WP Bold" /> 
           <TextBlock Text="{Binding PubDate}" 
              Margin="12,0,0,9" 
              FontSize="16" 
              FontStyle="Italic" 
              Padding="5,0,0,0" 
              FontFamily="Segoe WP" 
              Opacity="0.5" /> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 

,这里是后面的代码:

foreach (var item in RssFeedItems) 
     { 
      var inputString = item.Description; 
      var tempImageList = new List<string>(); 
      var inputStringBuilt = new StringBuilder(item.Description); 
      var temp = 1; 

      while (temp > 0) 
      { 
       var img = inputString.IndexOf("<img", StringComparison.Ordinal); 
       var src = inputString.IndexOf("src", img, StringComparison.Ordinal); 
       var quot = inputString.IndexOf('"', src + 5); 
       var len = quot - (src + 5); 
       var sub = len > 0 ? inputString.Substring(src + 5, len) : null; 
       tempImageList.Add(sub); 
       var closingBracket = inputString.IndexOf(">", src, StringComparison.Ordinal); 
       inputStringBuilt.Clear(); 
       inputStringBuilt.Append(inputString); 
       inputStringBuilt.Remove(img, closingBracket - img); 
       inputString = inputStringBuilt.ToString(); 
       temp = inputString.IndexOf("<img", StringComparison.Ordinal); 
      } 

      item.MiniImage = tempImageList[0] ?? "ApplicationIcon.png"; 

      var f = tempImageList.IndexOf(null) - 1; 
      while (f >= 0) 
      { 
       PostImages.Add(tempImageList[f]); 
       f--; 
      } 

      tempImageList.Clear(); 

      FirstListBox.Items.Add(item); 

     } 

什么想法?

回答

0

您可能希望在您的代码中发出Web请求,将结果传递到PictureDecoder.DecodeJpeg并绑定到从URL返回的WriteableBitmap,而不是URL。通过这种方式,您可以检测Web请求中的错误情况并做出相应的反应。

+0

嗯......可能是一个愚蠢的问题,但是......它只适用于jpgs吗?那么PNG呢?另一件事是 - 我该怎么做?我的意思是 - 我如何将返回的'WriteableBitmap'直接链接到XAML(而不是'UriSource')的'ItemTemplate'中的'BitmapImage'? – lashman

+0

@lashman'' - 'WriteableBitmap'是你可以设置属性的东西之一。 – asveikau

+0

是啊,我知道...问题是 - 我需要使用'BitmapImage'来创建它'CreateOptions =“DelayCreation,BackgroundCreation”'参数...并且'BitmapImage'没有'Source' ...它只有'UriSource'(至少直接来自XAML) – lashman

0

图像元素有一个名为事件ImageFailed,你会得到一个异常(包含在ExceptionRoutedEventArgs)

您可以使用此加载图像时检测到错误。

相关问题