2009-10-12 99 views
9

我有一個Image控件,其中包含嵌入圖像的路徑(構建操作「資源」)。在UserControl中不顯示嵌入圖像

<Image Source="Assets/images/image.png" Stretch="None" /> 

如果我添加到我的MainPage.xaml中的容器,圖像顯示正常。如下所示在UserControl中具有相同的圖像,然後在MainPage.xaml上添加該UserControl的實例時,圖像不會出現。

<UserControl x:Class="HomePage.Views.SimpleUserContol" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
    <Grid x:Name="LayoutRoot" > 
     <Image Source="Assets/images/image.png" Stretch="None" /> 
    </Grid> 
</UserControl> 

任何人都可以闡明爲什麼發生這種情況,也許指向我的解決方案。

乾杯,J

(我在Silverlight中工作,但會認爲同樣的事情在WPF可能發生)

編輯:

設置

<Image Source="/Assets/images/image.png" Stretch="None" /> 

在設置構建動作時正常工作到'內容',但使用'資源'時不起作用。問題是明確地說它是在文件結構中的相對位置,因爲添加../工作正常。如果可能的話,我仍然想要一個解決方案從程序集中獲取圖像

回答

16

您必須將其作爲資源引用,而不僅僅是路徑。 這是它是如何在WPF應用程序進行:

<Image Source="/MyAppName;component/images/image.png" Stretch="None" /> 

原始圖像位於圖像/ image.png

注:
我在Silverlight沒有經驗,但你說它可能類似於WPF,所以我建議這...

0

我認爲問題與圖像嵌入到資源中(從邏輯路徑到它)時獲得的「虛擬」命名空間有關,與你的usercontrol命名空間的區別。

8

您正在使用圖像的相對路徑。如果您的UserControl位於子目錄中,則相對路徑不再有效。您應該使用絕對路徑,如"/Assets/images/image.png""pack://application:,,,/Assets/images/image.png"(如果您的UserControl將由另一個程序集使用,請使用此最新版本)

0

只有當網站的根目錄不在子目錄內時,使用'/'才能到達站點的根目錄。即:管理站點作爲主站點的子目錄(http://www.somesite.com/admin)。在這種情況下,使用'/assets/images/image.png'會先到達父站點。您可以像這樣引用圖像:'〜/ assets/images/image.png'

3

如果您需要將其構建類型從「內容」更改爲「資源」,請嘗試構建清理。我擁有完全正確的一切(通往其他項目的資源,構建類型等),但直到我向images文件夾添加了一個新映像,這可能會清除舊的狀態,它纔會起作用。

實際上,手動刪除圖像所在項目中的bin和obj文件夾。

0

我也發現當一個圖像具有需要在文件名中編碼的特殊字符時,比如「+」,它被編碼爲%2b也會導致該問題。

我建議重命名任何可能包含轉義字符的圖像。