在后面的代码中使用资源图像
Posted
技术标签:
【中文标题】在后面的代码中使用资源图像【英文标题】:Using a resource image in code behind 【发布时间】:2010-10-20 22:28:40 【问题描述】:我需要动态更改应用于我的一个按钮的背景图像,但不知道如何。图像被添加到项目中,并将它们的 Build Action 设置为 Resource。我尝试了以下方法:
buttonUnits.Background = new ImageBrush(new BitmapImage(new Uri("/Images/InchDOWN.png",UriKind.Relative)));
编译成功,但会因 DirectoryNotFoundException 而崩溃,提示“找不到路径 'C:\Images\InchDOWN.png' 的一部分”。
我不希望应用在磁盘上查找图像。如何将图像用作嵌入式资源?我认为这涉及将 Build Action 更改为 Embedded Resource,但是如何在后面的代码中使用此资源?
【问题讨论】:
【参考方案1】:您必须将图像构建为资源而不是嵌入资源。资源是专门供 WPF 项目使用的。
在程序代码中使用它:
buttonUnits.Background = new ImageBrush(new BitmapImage(new Uri("pack://application:,,,/Images/InchDOWN.png")));
这在我推荐的 XAML 中要容易得多。
编辑
我忘记了图像之前的正斜杠,这可能是问题所在。如果您需要更多信息,这里是MSDN article about pack Uris。
也许您应该发布一个问题,说明您到底想要完成什么,并希望找到解决多状态按钮问题的不同方法。
【讨论】:
我已经尝试过了,我得到一个 NotSupportedException 说“无法识别 URI 前缀”。我同意,在 XAML 中设置图像会更容易,但我的目标是一种多状态按钮,不知道如何在 XAML 中做到这一点。以上是关于在后面的代码中使用资源图像的主要内容,如果未能解决你的问题,请参考以下文章
在后面的代码中动态绑定 DataGridComboBoxColumn