如何使用WPF中的资源图标?

我有一个作为资源embedded的.ico文件(生成操作设置为资源)。 我正在尝试创build一个NotifyIcon。 我怎样才能引用我的图标?

notifyIcon = new NotifyIcon(); notifyIcon.Icon = ?? // my icon file is called MyIcon.ico and is embedded 

您的图标文件应该被添加到您的项目程序集之一,其生成操作应该被设置为资源。 在添加对程序集的引用后,可以像这样创build一个NotifyIcon:

 System.Windows.Forms.NotifyIcon icon = new System.Windows.Forms.NotifyIcon(); Stream iconStream = Application.GetResourceStream( new Uri( "pack://application:,,,/YourReferencedAssembly;component/YourPossibleSubFolder/YourResourceFile.ico" )).Stream; icon.Icon = new System.Drawing.Icon( iconStream ); 

通用的使用模式是使通知图标与主窗口的图标相同。 该图标被定义为PNG文件。

为此,将图像添加到项目的资源,然后使用,如下所示:

 var iconHandle = MyNamespace.Properties.Resources.MyImage.GetHicon(); this.notifyIcon.Icon = System.Drawing.Icon.FromHandle(iconHandle); 

在XAML窗口中:

 <Window x:Class="MyNamespace.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:local="clr-namespace:Seahorse" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="600" Icon="images\MyImage.png"> 

那么,你不想使用resx风格的资源:你只需将ico文件粘贴到你的项目文件夹中(可以说是“ArtWork”),并在属性中将Build Action设置为“Resources”…

然后你可以使用PACK URI在XAML中引用它…“pack:// application:,,, / Artwork / Notify.ico”

看到这里: http : //msdn.microsoft.com/en-us/library/aa970069.aspx和示例

如果你想要多一点… WPF,你应该看看CodePlex上的WPF Contrib项目,它有一个NotifyIcon控件,你可以在XAML中创build它,并使用标准的WPF菜单(所以你可以把任何东西“在菜单中)。

我在这里创build了一个项目,并使用了一个embedded式资源(构build操作被设置为embedded式资源,而不仅仅是资源)。 此解决scheme不适用于资源,但您可能可以操纵它。 我把这个放在OnIntialized()上,但是它不必去那里。

 //IconTest = namespace; exclamic.ico = resource System.IO.Stream stream = this.GetType().Assembly.GetManifestResourceStream("IconTest.Resources.exclamic.ico"); if (stream != null) { //Decode the icon from the stream and set the first frame to the BitmapSource BitmapDecoder decoder = IconBitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None); BitmapSource source = decoder.Frames[0]; //set the source of your image image.Source = source; } 

如果您只是在寻找简单的答案,我认为这就是MyApp是您的应用程序名称,并且这是您的应用程序的根名称空间名称。 您必须使用pack URI语法,但是将图标从embedded式资源中取出不一定非常复杂。

  <Window x:Class="MyApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Height="100" Width="200" Icon="pack://application:,,,/MyApp;component/Resources/small_icon.ico">