将ImageSource对象直接绑定到XAML/WPF中的图像源?
我有以下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不会引发错误)
试着改变你的URI路径...
"../Resources/a.ico"
编辑:
如果你想在不同的组件引用图像尝试使用pack syntax ...
pack://application:,,,/ReferencedAssembly;component/Resources/a.ico
...其中ReferencedAssembly
是包含您的图像的程序集。
好吧,但现在我把我的C#代码(也是资源图片)到另一个程序集中 - 在远程程序集中图像可以现在加载,但是当我想在本地程序集中绑定它们时,不显示任何图标......虽然图像可以加载......奇怪:/ – 2010-12-15 17:16:07
@A Bothe虽然我的确回答了你的最初问题......我编辑了答案,为你的后续问题提供了解决方案 – 2010-12-15 17:20:49
因此,不可能例如在一个程序集中加载一个BitmapImage,并在另一个程序集中使用它(例如创建一个Image控件,而Source是BitmapImage实例)? – 2010-12-15 17:32:48
嗯,我得到了错误的原因,但仍然没有解决 -
“资源/ a.ico” 根本找不到 - 所以它是没有XAML问题了。
但这正是a.ico位于另一个大会的情况。所以现在的问题是: 如何到达这个图标?
现在我用了pack://application:,,,/MyApp.ExtAssembly;/Resources/a.ico
- 但它总是抛出一个异常,它没有被发现...
问题解决方法:我只是把图标放入一个resx文件,在需要时将它们加载到BitmapImage资源中 - 就是这样:D ..无论如何,感谢所有支持我的人! – 2010-12-15 19:36:47
我想你应该重新考虑你的概念,并使用一个枚举的语言。在xaml中,您可以使用valueconverters将枚举转换为语言名称和图标。 – thumbmunkeys 2010-12-15 16:15:23
您遇到的问题是对象上的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