【问题标题】:How to check if Image is loaded while coming back in Navigation stack返回导航堆栈时如何检查图像是否已加载
【发布时间】:2011-07-18 18:17:34
【问题描述】:

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

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

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

【问题讨论】:

  • 我怎么知道卸载的图像已经获得焦点。每当用户在导航历史记录中导航回来时,我是否需要遍历当前页面内容的所有子项?如果是,则属性 Children 并不存在于所有控件中。例如,如果我的当前页面包含一个画布、一个网格或一个堆栈面板,那么我可以遍历它们的所有子项。但如果它是全景图或枢轴,我将如何遍历它们的所有子节点。这些控件没有可用的 Children 属性。
  • 你能展示一下你所看到的东西吗?我不明白你在做什么,这可能导致我认为你在描述。

标签: windows-phone-7


【解决方案1】:

【讨论】:

  • 我怎么知道卸载的图像有焦点。每当用户在导航历史记录中导航回来时,我是否需要遍历当前页面内容的所有子项?如果是,则属性 Children 并不存在于所有控件中。例如,如果我当前的页面包含一个画布、一个网格或一个堆栈面板,那么我可以遍历它们的所有子项。但如果它是全景图或枢轴,我将如何遍历它们的所有子节点。这些控件没有可用的 Children 属性。
  • 这与原始问题无关......但是,您在两者上都有 Items 属性。不知道这对你有什么帮助。
【解决方案2】:
  1. argh 建议使用ImageOpened 事件(也许还有ImageFailed)来跟踪图像是否已成功加载。您可以围绕 Image 创建一个包装控件(由于它是密封的,因此无法继承)来监控事件并实现您自己的 IsLoaded 属性。
  2. 对于问题的第二部分,您可以使用VisualTreeHelper.GetParent 向上遍历树并查看 Image 控件是否是 MainPage 的后代。

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

【讨论】:

    【解决方案3】:

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

    可以查看Image的当前名称,如果与Temp Image名称类似,则继续down不会down 我的代码:

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

    【讨论】:

      【解决方案4】:

      我建议您查看 LowProfileImageLoader http://blogs.msdn.com/b/delay/archive/2010/09/02/keep-a-low-profile-lowprofileimageloader-helps-the-windows-phone-7-ui-thread-stay-responsive-by-loading-images-in-the-background.aspx) 作为一种有效处理图像加载的通用方法。如果您特别需要能够取消和恢复图像的加载,您应该能够修改该代码以非常轻松地处理它 - 尽管我不确定您为什么要这样做,但请记住它对电池的下载效率更高一次点击所有图像而不是停止和启动。

      【讨论】:

        猜你喜欢
        • 2021-06-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2012-12-31
        • 2014-11-30
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        相关资源
        最近更新 更多