2010-12-15 88 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

相关问题