2011-07-04 66 views
4

在我的MainPage中,我添加了許多圖像,每個圖像都是通過製作HttpWebRequest從服務器檢索的。在MainPage上還有一些鏈接,單擊這些鏈接可將用戶帶到新頁面。如何檢查圖像是否在導航堆棧中加載時加載

我面對的問題是,在所有圖像加載到MainPage本身之前,如果我點擊MainPage上的任何鏈接,將創建並顯示一個新頁面,並且所有掛起的圖像請求都被取消。現在,如果通過單擊後退按鈕返回到MainPage,卸載的圖像仍保持卸載狀態。

我不知道如何檢查圖像是否已經加載或沒有,當我回到導航堆棧中的MainPage(如果我能夠發現一些圖像沒有加載,我可以請求服務器再次爲卸載的圖像)。我需要一個通用的解決方案。因爲MainPage內容佈局中的父子關係是動態的,意味着我不知道Image控件的層次結構,所以Image控件可以是一個畫布的子項,該畫布依次添加到MainPage的內容網格或圖像可以添加到一個全景/樞軸繼而加入的MainPage的內容的網格,等的部分中,....

+0

我如何知道卸載的圖像得到了重點。當用戶導航回導航歷史記錄時,是否需要遍歷當前頁面內容的所有子項?如果是,則所有控件中都沒有兒童財產。例如,如果我的當前頁面包含畫布或網格或堆棧面板,則可以遍歷它們的所有子項。但如果它是一幅全景圖或主題圖,我將如何循環瀏覽它們的所有孩子。沒有兒童財產可用於這些控件。 – saikamesh

+0

你能看到你所看到的repro嗎?我不明白你在做什麼,導致我認爲你在描述的內容。 –

回答

2
+0

我如何知道卸載的圖像已獲得重點。當用戶導航回導航歷史記錄時,是否需要遍歷當前頁面內容的所有子項?如果是,則所有控件中都沒有兒童財產。例如,如果我的當前頁面包含畫布或網格或堆棧面板,則可以遍歷它們的所有子項。但如果它是一幅全景圖或主題圖,我將如何循環瀏覽它們的所有孩子。沒有兒童財產可用於這些控件。 – saikamesh

+0

這與原始問題無關......但是,您在兩者上都有Items屬性。不知道這會怎樣幫助你。 – argh

1
  1. 作爲argh建議使用ImageOpened事件(也可能是ImageFailed)來跟蹤圖像是否已成功加載。您可以創建一個包含Image的包裝控件(無法繼承,因爲它是密封的)來監視事件並實現您自己的IsLoaded屬性。
  2. 您可以使用VisualTreeHelper.GetParent向上遍歷樹,並查看Image控件是否是MainPage的後代,以查找問題的第二部分。

這應該工作,但是,我想知道爲什麼當您按下後退按鈕圖像不重新加載。我不認爲任何建議的'黑客'應該是必要的。你是否使用任何自定義邏輯進行圖像加載等?

0

您可以檢查圖像溫度名稱。因爲在我的項目中我使用圖像臨時顯示圖像加載到服務器之前。

您可以查看當前名稱的形象,如果是類似於臨時圖像名稱,然後繼續下跌,他們將不下來 我的代碼:

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

我建議你看看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)作爲以有效方式處理圖像加載的通用方式。如果您特別需要能夠取消並恢復加載圖像,您應該可以修改該代碼以便輕鬆處理 - 儘管我不確定您爲什麼要這麼做,但請記住它更有效地使用電池下載所有的圖像在一個命中而不是停止和開始。