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

我有一个。作为资源嵌入的 ico 文件(将构建操作设置为资源)。我正在创建一个 NotifyIcon。如何引用我的图标?

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

应将图标文件添加到项目程序集中,并将其“生成操作”设置为“资源”。在添加对程序集的引用之后,您可以像下面这样创建 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 );

好吧,您不想使用 resx 样式的资源: 您只需将 ico 文件放在项目中的一个文件夹中(比如说“ ArtWork”) ,然后在属性中,将 Build Action 设置为“ Resources”..。

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

看这里: http://msdn.microsoft.com/en-us/library/aa970069.aspx样本

如果你想更像 WPF,你应该看看 CodePlex 上的 WPF 捐款项目,它有一个 NotifyIcon 控件,你可以在 XAML 中创建它,它使用标准的 WPF 菜单(所以你可以在菜单中粘贴“任何东西”)。

我在这里创建了一个项目并使用了一个嵌入式资源(构建操作被设置为嵌入式资源,而不仅仅是资源)。此解决方案不适用于资源,但您可以对其进行操作。我把这个放在 OnInitialization ()上,但它不一定要放在那里。

//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;
}

一种常见的使用模式是使通知图标与主窗口的图标相同。图标定义为 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">

如果您只是在寻找简单的答案,我认为这就是 MyApp 作为您的应用程序名称以及您的应用程序的根名称空间名称的地方。您必须使用 pack URI 语法,但是从嵌入式资源中提取图标并不复杂。

    <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">