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

本文关键字:图像 控件 加载 资源 | 更新日期: 2023-09-27 18:02:36

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

我没有运气,要么得到异常抛出或预加载的图像是不可见的,当它应该改变。我在这里尝试了各种问题的代码样本,但我仍然没有运气。

文件夹结构-> Resources/Images/Themes/{mytheme}.png构建操作->资源(都已作为资源添加到资源中。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;

但是这段代码总是给我一个例外"无法定位资源'resources/images/themes/lightindigo.png' "。

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

在后面的代码中,您必须使用完全限定的资源文件包Uri

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

您也可以通过使用接受Uri参数的BitmapImage构造函数来避免BeginInit/EndInit调用:

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

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

试试这样:

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();

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