微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 从代码中访问资源以设置NotifyIcon.Icon

我试图在 WPF获取NotifyIcon的图标.

所以我在一个Resources文件夹中为我的解决方添加一个.ico文件,并将构建操作设置为Resource.

我试图在代码后面抓住这个资源,如下所示:

var icon =(Icon)Application.Current.FindResource(“/ Resources / icon.ico”)

这不起作用.

除此之外:Application.Current.Resources.Count返回0.

编辑

var i = new Icon(Application.GetResourceStream(new Uri(“/ systemtrayicon.ico”,UriKind.Relative)).Stream);

将根中的图标和构建操作设置为Resource.

还是行不通.

再次编辑:

我需要清理解决方案并按照:WPF throws “Cannot locate resource” exception when loading the image重建

解决方法

您必须将resourceName作为参数传递给FindResource方法,而不是Resource的路径.示例代码如下所示:
var icon = (Icon) Application.Current.FindResource("myImage")

请注意,在上面的示例代码中,“myImage”是资源名称.

请参阅MSDN上的Application.FindResource方法.

你说,Application.Current.Resources.Count为零,这意味着你没有在App.xaml文件中定义任何资源.

您可以像这样向App.xaml添加资源:

<Application.Resources>
     <Image x:Key="myImage" Source="img.png" />
</Application.Resources>

您的图标似乎是嵌入式资源. FindResource无法使用嵌入式资源.将您的图标的BuildAction设置为Resource.

有关WPF资源的更多信息,请参阅this MSDN页面.

UPDATE

访问嵌入式资源的代码

Assembly.GetExecutingAssembly().GetManifestResourceStream("myImg.png");

但是,如果您已将此映像添加到Resources.Resx,您应该只能使用Resources.ResourceName.

更新2

向App.xaml或任何ResourceDictionary添加资源更好,因此您可以通过StaticResource或DynamicResource标记扩展将它们用作静态/动态资源.

如果您不想将其添加到App.xaml资源并仍想访问它,我上面提到的一个选项是将它添加到Resources.Resx并使用Resources.ResourceName来引用图标/图像

另一种方法是自己创建System.Drawing.Icon,示例代码

new System.Drawing.Icon(Application.GetResourceStream(new Uri("/Resources/icon.ico")));

就个人而言,我会使用XAML资源并将它们添加到App.xaml或ResourceDictionary.

原文地址:https://www.jb51.cc/csharp/98336.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐