1

我正在爲Windows Phone 7編寫應用程序,儘管我想我理解如何綁定字段,但我無法將圖像綁定到XAML元素。圖像數據綁定XAML,Silverlight,C#,Windows Phone 7.1

這是我的形象元素是如何在我的XAML定義:

<image Source="{Binding ImageLocation}" > </image> 

ImageLocation是一個字符串屬性。出於某種原因,如果「ImageLocation」是一個指向Internet上圖像的字符串(例如「http://whatever/image.jpg」),但是如果圖像存儲在本地時不顯示任何內容在孤立的存儲上。

事實上,圖像位於Isolated Storage中名爲「Images」的文件夾中。因此,我已經嘗試將ImageLocation屬性設置爲「Images \ image.jpg」,但沒有奏效。圖像根本不顯示。我也嘗試了一些變體,如「/Images/image.jpg」,「http://localhost/Images/image.jpg」,以及其他各種奇怪的組合。

我也試圖做到這一點:

<image Source="{Binding Path=ImageLocation}"> </image> 

但也不能工作。如果圖像位於本地,則圖像根本不顯示,但如果它位於遠程站點,則該圖像始終有效。

我看到了使用「轉換器」顯示圖像的網絡上的各種示例。由於我是C#和Silverlight的新手,我不太明白爲什麼我需要一個轉換器。據我瞭解,轉換器對於圖像來說,只會根據XAML元素的要求(我可能是錯的)返回字符串或實際圖像數據。但是,由於我事先知道一個字符串應該工作,爲什麼我甚至不得不寫這個轉換器?

除了圖像,我所有的其他領域都正確綁定。

這裏是我的代碼設置一些想法:

我定義我的XAML頁面有一個ItemTemplate和一個DataTemplate一個列表框元素。在裏面,我有一個兩列分別保存圖像和文本字段的網格。

除此之外,我有一個從IList派生的類來支持延遲加載。這個類有一個「ListItems」列表,表示列表框的每一行。 ListItem具有字符串屬性,用於定義圖像以及與它們相關的一些文本。正如我所提到的那樣,文本字段可以正常工作,並且圖像僅在ImageLocation屬性指向Internet上的某個位置時纔有效,但不是隔離存儲上的位置。

我已經檢查了獨立存儲瀏覽器工具,並確保我試圖加載的映像位於獨立存儲上,因此它不是找不到該文件的問題。

感謝您的意見或建議。

+0

創建一個返回圖像的屬性並綁定到替代 – JonAlb

+0

@JonAlb:雖然這會工作,是遠遠不夠靈活有單獨的圖像性能,所有的需要從文件名創建。對於大多數綁定轉換,最好使用轉換器。然後在使用後,您不會在內存中攜帶圖像。 –

回答

2

隔離的存儲文件只能以流的形式訪問。如果你想存儲你的圖像,你需要在綁定上使用轉換器。這些將打開指定的文件,將流加載到內存中並返回位圖圖像源。 他們不只是返回一個文件名。

相對路徑(例如您的示例)用於存儲爲Silverlight DLL中的應用程序資源或託管網站資源(取決於引導斜槓和程序集名稱等)的圖像。

這個答案有一個轉換器,你可以嘗試:Windows Phone 7 Silverlight binding image from the IsolatedStorage

+0

謝謝。我最初有代碼實際加載圖像,然後我想,等待,爲什麼我會返回流時,我可以指向它的文件名。你的解釋幫助我更好地理解一切如何運作。 – MariusVE