为了账号安全,请及时绑定邮箱和手机立即绑定

在代码中设置WPF图像源

在代码中设置WPF图像源

慕码人2483693 2019-07-23 16:21:32
在代码中设置WPF图像源我正在尝试在代码中设置WPF图像的源代码。图像作为资源嵌入到项目中。通过查看示例,我提出了以下代码。由于某种原因,它不起作用 - 图像不显示。通过调试,我可以看到流包含图像数据。那有什么不对?Assembly asm = Assembly.GetExecutingAssembly();Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);ImageSource iconSource = iconDecoder.Frames[0];_icon.Source = iconSource;图标的定义如下: <Image x:Name="_icon" Width="16" Height="16" />
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

在遇到与您相同的问题并进行一些阅读后,我发现了解决方案 - 包URI

我在代码中做了以下事情:

Image finalImage = new Image();finalImage.Width = 80;...BitmapImage logo = new BitmapImage();logo.BeginInit();logo.UriSource = new Uri("pack:
//application:,,,/AssemblyName;component/Resources/logo.png");logo.EndInit();...finalImage.Source = logo;

或更短,使用另一个BitmapImage构造函数:

finalImage.Source = new BitmapImage(
    new Uri("pack://application:,,,/AssemblyName;component/Resources/logo.png"));

URI分为几部分:

  • 权威: application:///

  • 路径:编译为引用的程序集的资源文件的名称。路径必须符合以下格式:AssemblyShortName[;Version][;PublicKey];component/Path

    • AssemblyShortName:引用的程序集的简称。

    • ; Version [可选]:包含资源文件的引用程序集的版本。当加载两个或多个具有相同短名称的引用程序集时,将使用此方法。

    • ; PublicKey [可选]:用于对引用的程序集进行签名的公钥。当加载两个或多个具有相同短名称的引用程序集时,将使用此方法。

    • ; component:指定从本地程序集引用所引用的程序集。

    • / Path:相对于引用程序集的项目文件夹的根目录的资源文件的名称,包括其路径。

之后的三个斜线application:必须用逗号替换:

注意:包URI的权限组件是指向包的嵌入式URI,必须符合RFC 2396.此外,“/”字符必须替换为“,”字符和保留字符,例如“%”和“?” 必须逃脱。有关详细信息,请参阅OPC。

当然,请确保将图像上的构建操作设置为Resource


查看完整回答
反对 回复 2019-07-23
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

很容易:

要动态设置菜单项的图像,只需执行以下操作:

MyMenuItem.ImageSource = 
    new BitmapImage(new Uri("Resource/icon.ico",UriKind.Relative));

...而“icon.ico”可以位于任何地方(目前它位于“资源”目录中),并且必须作为资源链接...


查看完整回答
反对 回复 2019-07-23
  • 2 回答
  • 0 关注
  • 508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信