2010-12-15 114 views
3

我有以下XAML代碼:將ImageSource對象直接綁定到XAML/WPF中的圖像源?

<ListBox ItemsSource="{Binding Languages}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <Image Source="{Binding LanguageIcon}" /> 
       <Label Content="{Binding LanguageName}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

,並在模型類:

class Language { 
    public string LanguageName; 
    public ImageSource LanguageIcon; 
} 

我的模型視圖類包含:

public List<Language> Languages; 

其被裝滿:

Languages.Add(new Language("A",new BitmapImage(new Uri("Resources/a.ico", 
    UriKind.Relative)))); 
Languages.Add(new Language("B",new BitmapImage(new Uri("Resources/b.ico", 
    UriKind.Relative)))); 

當我運行該項目時,我的所有語言名稱都顯示在列表中,但不顯示圖標......爲什麼會發生這種情況,我如何確保顯示圖標? (我相信確實存在的資源爲BitmapImages不會引發錯誤)

+0

我想你應該重新考慮你的概念,並使用一個枚舉的語言。在xaml中,您可以使用valueconverters將枚舉轉換爲語言名稱和圖標。 – thumbmunkeys 2010-12-15 16:15:23

+0

您遇到的問題是對象上的Image.Source是ImageSource對象,但是當它通過Xaml公開時,它是Uri的字符串。 http://msdn.microsoft.com/en-us/library/system.windows.controls.image.source(v=VS.95).aspx – Agies 2010-12-15 16:23:45

回答

5

試着改變你的URI路徑...

"../Resources/a.ico" 

編輯

如果你想在不同的組件引用圖像嘗試使用pack syntax ...

pack://application:,,,/ReferencedAssembly;component/Resources/a.ico 

...其中ReferencedAssembly是包含您的圖像的程序集。

+0

好吧,但現在我把我的C#代碼(也是資源圖片)到另一個程序集中 - 在遠程程序集中圖像可以現在加載,但是當我想在本地程序集中綁定它們時,不顯示任何圖標......雖然圖像可以加載......奇怪:/ – 2010-12-15 17:16:07

+0

@A Bothe雖然我的確回答了你的最初問題......我編輯了答案,爲你的後續問題提供瞭解決方案 – 2010-12-15 17:20:49

+0

因此,不可能例如在一個程序集中加載一個BitmapImage,並在另一個程序集中使用它(例如創建一個Image控件,而Source是BitmapImage實例)? – 2010-12-15 17:32:48

0

嗯,我得到了錯誤的原因,但仍然沒有解決 -

「資源/ a.ico」 根本找不到 - 所以它是沒有XAML問題了。

但這正是a.ico位於另一個大會的情況。所以現在的問題是: 如何到達這個圖標?

現在我用了pack://application:,,,/MyApp.ExtAssembly;/Resources/a.ico - 但它總是拋出一個異常,它沒有被發現...

+0

問題解決方法:我只是把圖標放入一個resx文件,在需要時將它們加載到BitmapImage資源中 - 就是這樣:D ..無論如何,感謝所有支持我的人! – 2010-12-15 19:36:47

相關問題