将图像从资源加载到图像控件

时间:2015-07-13 12:45:04

标签: c# wpf wpf-controls

我有一个包含一些图像的文件夹结构,我正在尝试使用c#(而不是xaml)加载和更改代码的背景。

我对此没有好运,要么抛出异常,要么预装的图像在应该改变时不可见。我在这里尝试了各种问题的代码示例,但我仍然没有运气。

文件夹结构 - > Resources/Images/Themes/{mytheme}.png 构建行动 - >资源 (所有这些都已作为资源添加到resources.resx中)

我目前的代码是..

var themeImage = new BitmapImage();
var filename = string.Format("{0}{1}.png", cmbBaseThemes.SelectedValue.ToString(), cmbAccentColors.SelectedValue.ToString());
themeImage.BeginInit();
themeImage.UriSource = new Uri(@"/ZApp;component/Resources/Images/Themes/" + filename, UriKind.RelativeOrAbsolute);
themeImage.EndInit();
imgThemeStyle.Source = themeImage;

但是这段代码总是给我一个例外“找不到资源'资源/ images / themes / lightindigo.png'。”

3 个答案:

答案 0 :(得分:0)

您可能在创建时遗漏了一些参数。

尝试这种方式:

img = new BitmapImage();
img.BeginInit();
img.CacheOption = BitmapCacheOption.OnLoad;
img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
img.UriSource = new Uri(@"/ZApp;component/Resources/Images/Themes/" + filename, UriKind.RelativeOrAbsolute);
img.EndInit();

答案 1 :(得分:0)

在您背后的代码中,您必须使用完全限定的Resource File Pack Uri

themeImage.UriSource = new Uri(
    "pack://application:,,,/ZApp;component/Resources/Images/Themes/" + filename);

您还可以使用带有BeginInit参数的EndInit构造函数来避免BitmapImage / Uri调用:

imgThemeStyle.Source = new BitmapImage(new Uri(
    "pack://application:,,,/ZApp;component/Resources/Images/Themes/" + filename));

答案 2 :(得分:0)

您是否尝试过更改Uri的格式?也许试试包Uri? https://msdn.microsoft.com/en-us/library/vstudio/aa970069(v=vs.100).aspx