Windows phone 7 如何在返回导航堆栈时检查图像是否已加载

Windows phone 7 如何在返回导航堆栈时检查图像是否已加载,windows-phone-7,Windows Phone 7,在我的主页中,我添加了许多图像,每个图像都是通过发出HttpWebRequest从服务器检索的。主页上也有一些链接,单击这些链接会将用户带到新页面 我面临的问题是,在将所有图像加载到主页本身之前,如果我单击主页上的任何链接,将创建并显示一个新页面,并且取消所有挂起的图像请求。现在,如果我点击后退按钮返回主页,卸载的图像仍然保持卸载状态 当我回到导航堆栈中的主页时,我不知道如何检查图像是否已经加载(如果我能够发现一些图像没有加载,我可以再次请求服务器加载卸载的图像)。我需要一个通用的解决方案。因为

在我的主页中,我添加了许多图像,每个图像都是通过发出HttpWebRequest从服务器检索的。主页上也有一些链接,单击这些链接会将用户带到新页面

我面临的问题是,在将所有图像加载到主页本身之前,如果我单击主页上的任何链接,将创建并显示一个新页面,并且取消所有挂起的图像请求。现在,如果我点击后退按钮返回主页,卸载的图像仍然保持卸载状态


当我回到导航堆栈中的主页时,我不知道如何检查图像是否已经加载(如果我能够发现一些图像没有加载,我可以再次请求服务器加载卸载的图像)。我需要一个通用的解决方案。因为主页内容布局中的父子关系是动态的,这意味着我不知道图像控件的层次结构,图像控件可以是画布的子级,然后添加到主页的内容网格,或者图像可以添加到全景/透视图的某个部分,然后再添加到主页的内容网格,等等,..

图像控件上有一个与此相关的事件->

  • 正如argh所建议的,使用事件(可能还包括事件)来跟踪映像是否已成功加载。您可以围绕映像创建一个包装控件(由于它是密封的,所以无法继承),以监视事件并实现您自己的IsLoaded属性
  • 对于问题的第二部分,您可以使用遍历树,查看图像控件是否是MainPage的后代

  • 这应该是可行的,但是,我想知道为什么当你按下后退按钮时图像没有被重新加载。我不认为任何建议的“黑客”都是必要的。您是否使用任何自定义逻辑来加载图像等?

    您可以检查图像温度的名称。因为在我的项目中,我在图像加载到服务器之前使用图像临时显示

    您可以检查映像的当前名称,如果它与临时映像名称相似,则“继续向下”它们将不会向下 我的代码:

    if(((BitmapImage)img.Source).UriSource.Equals("/NhomMua;component/Image/img_temp_sale.png"))
                            {
                               //code of you 
                            }
    

    我建议您看看LowProfileImageLoader),它是一种以高效方式处理图像加载的通用方法。如果您特别需要能够取消并恢复图像加载,那么您应该能够修改代码以非常轻松地处理该问题-尽管我不确定您为什么要这样做,记住,一次点击下载所有图像比停止和启动更有效。

    我如何知道卸载的图像获得了焦点。每当用户返回导航历史记录时,我是否需要遍历当前页面内容的所有子项?。如果是,则属性子项不存在于所有控件中。例如,如果我的当前页面包含画布、网格或堆栈面板,那么我可以循环遍历它们的所有子级。但是,如果它是一个全景或轴心,我将如何循环通过他们的所有孩子。这些控件没有可用的子属性。这与原始问题无关。。。但是,这两个属性上都有Items属性。我不知道这对你有什么帮助。我怎么知道卸载的图像得到了焦点。每当用户返回导航历史记录时,我是否需要遍历当前页面内容的所有子项?。如果是,则属性子项不存在于所有控件中。例如,如果我的当前页面包含画布、网格或堆栈面板,那么我可以循环遍历它们的所有子级。但是,如果它是一个全景或轴心,我将如何循环通过他们的所有孩子。这些控件没有可用的Children属性。能否显示所看到内容的复制?我不明白你在做什么,因为我认为你在描述什么。