Che*_*tah 7 c# wpf notifyicon embedded-resource
我想NotifyIcon在WPF中获取一个图标.
所以我.ico在一个Resources文件夹中为我的解决方案添加了一个文件,并将构建操作设置为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在加载图像时抛出"无法找到资源"异常
Shi*_*ava 16
这将100%有效
ni.Icon = new Icon(Application.GetResourceStream(new Uri("pack://application:,,,<Image Location From root>")).Stream);
Run Code Online (Sandbox Code Playgroud)
例:
notify.Icon = new Icon(Application.GetResourceStream(new Uri("pack://application:,,,/images/favicon.ico")).Stream);
Run Code Online (Sandbox Code Playgroud)
您必须将resourceName作为参数传递给FindResource方法,而不是Resource的路径.示例代码如下所示:
var icon = (Icon) Application.Current.FindResource("myImage")
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的示例代码中,"myImage"是资源名称.
请参阅MSDN 上的Application.FindResource方法.
你说,Application.Current.Resources.Count为零,这意味着你没有在App.xaml文件中定义任何资源.
您可以像这样向App.xaml添加资源:
<Application.Resources>
<Image x:Key="myImage" Source="img.png" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
您的图标似乎是嵌入式资源.FindResource无法使用嵌入式资源.一套BuildAction你的图标Resource.
有关WPF资源的更多信息,请参阅此 MSDN页面.
UPDATE
访问嵌入式资源的代码
Assembly.GetExecutingAssembly().GetManifestResourceStream("myImg.png");
Run Code Online (Sandbox Code Playgroud)
但是,如果您已将此图像添加到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")));
Run Code Online (Sandbox Code Playgroud)
就个人而言,我会使用XAML资源并将它们添加到App.xaml或ResourceDictionary.