【问题标题】:Binding an ImageSource object directly to an Image source in XAML/WPF?将 ImageSource 对象直接绑定到 XAML/WPF 中的图像源?
【发布时间】:2010-12-15 16:02:03
【问题描述】:

我有以下 XAML 代码:

<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 不会抛出错误)

【问题讨论】:

  • 我认为您应该重新考虑您的概念并使用枚举作为语言。在 xaml 中,您可以使用 valueconverters 将枚举转换为语言名称和图标。
  • 您遇到的问题是对象上的 Image.Source 是 ImageSource 对象,但是当它通过 Xaml 公开时,它是 Uri 的字符串。 msdn.microsoft.com/en-us/library/…

标签: wpf mvvm binding imagesource


【解决方案1】:

尝试将您的 Uri 路径更改为...

"../Resources/a.ico"

编辑

如果您尝试在不同的程序集中引用图像,请尝试使用 pack syntax...

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

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

【讨论】:

  • 好的,但现在我将我的 c# 代码(以及资源​​图像)放入另一个程序集中 - 在远程程序集中,图像现在可以加载但是当我想在本地程序集中绑定它们时,没有显示图标...虽然可以加载图像...奇怪:/
  • @A Bothe 虽然我确实回答了您最初的问题...我编辑了答案以提供您后续问题的解决方案
  • 所以不可能例如在一个程序集中加载一个 BitmapImage 并在另一个程序集中使用它(例如创建一个 Image 控件,而 Source 是那个 BitmapImage 实例)?
  • @A Bothe 有可能。您可以从不同的程序集引用一个程序集中的 BitmapImage,并在该 BitmapImage 后面的代码中设置 Image.Source,如果您将 Image 的 DataContext 设置为来自不同程序集的引用 BitmapImage,它将显示它也将工作...如果您在发布有关程序集的其他详细信息时遇到问题可能会有所帮助...我
  • 好的,我现在注意到该图标甚至还没有加载到附属程序集中。我尝试通过 pack://application:,,,/MyApp.ExtAssembly;/a.ico 加载图像,而 MyApp.ExtAssembly 是我的附属程序集的名称,a.ico 位于项目的根文件夹中。无论如何,它每次都会抛出,因为它只是找不到它......奇怪......(是的,我将 a.ico 编译为资源:-))
【解决方案2】:

好吧,我得到了错误原因,但仍然没有解决方案 -

“资源/a.ico”根本找不到 - 所以它不再是 XAML 问题了。

但正是这种情况下,a.ico 位于另一个程序集中。所以现在的问题是: 如何到达这个图标?

现在我使用了pack://application:,,,/MyApp.ExtAssembly;/Resources/a.ico - 但它总是抛出一个未找到的异常...

【讨论】:

  • 问题解决方法:我只是将图标放入 resx 文件,在需要时将它们加载到 BitmapImage 资源中 - 就是这样 :D .. 无论如何,感谢所有支持我的人!
猜你喜欢
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多