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

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

How do I use an icon that is a resource in WPF?

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

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

您的图标文件应添加到您的项目程序集之一,并且其"构建操作"应设置为"资源"。添加对程序集的引用后,您可以创建一个NotifyIcon,如下所示:

1
2
3
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文件。

为此,请将图像添加到项目的资源中,然后按以下方式使用:

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

在XAML窗口中:

1
2
3
4
5
6
<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.webp">


好吧,您不想使用resx样式资源:您只需将ico文件粘贴在项目中的文件夹中(让我们说" ArtWork"),然后在属性中,将Build Action设置为" Resources" ...

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

参见此处:http://msdn.microsoft.com/zh-cn/library/aa970069.aspx和示例

如果您想要更多... WPF之类的东西,则应查看CodePlex上的WPF Contrib项目,该项目具有一个NotifyIcon控件,可以在XAML中创建该控件,并使用标准WPF菜单(因此您可以粘贴"任何内容")。


如果您只是在寻找简单的答案,我想就是MyApp是您的应用程序名称,而这就是您的应用程序的根名称空间名称的地方。您必须使用pack URI语法,但是将图标从嵌入式资源中拉出来不必那么复杂。

1
2
3
4
5
6
7
8
9
    <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">

我在这里创建了一个项目,并使用了嵌入式资源(将构建操作设置为嵌入式资源,而不仅仅是资源)。该解决方案不适用于Resource,但是您可以操纵它。我把它放在OnIntialized()上,但不必去那里。

1
2
3
4
5
6
7
8
9
10
11
12
//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;
    }


推荐阅读

    linux拼接文件命令?

    linux拼接文件命令?,文件,数据,命令,代码,时间,信息,系统,情况,管理,标准,Lin

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux分辨率操作命令?

    linux分辨率操作命令?,系统,情况,分辨率,底部,状态,命令,屏幕,屏幕分辨率,

    linux打开文件夹命令?

    linux打开文件夹命令?,工作,系统,信息,命令,图片,文件,管理,发行,名字,名称,

    linux上清空文件命令?

    linux上清空文件命令?,系统,命令,文件夹,名字,档案,文件,目录,方法,终端,指

    linux命令拷贝文件?

    linux命令拷贝文件?,系统,文件,命令,目录,情况,源文件,目标,文件夹,选项,语

    linux命令被替换文件?

    linux命令被替换文件?,系统,文件,命令,批量,工具,电脑,工作,保险,实时,字符

    linux命令行操作软件?

    linux命令行操作软件?,软件,工具,系统,名称,管理,工作,命令,设计,平台,标准,

    压缩文件夹命令linux?

    压缩文件夹命令linux?,系统,软件,命令,工具,电脑,文件,文件名,格式,选项,目

    linux配置文件夹命令?

    linux配置文件夹命令?,地址,系统,工作,信息,命令,标准,服务,名称,位置,文件,l

    linux管理文件的命令?

    linux管理文件的命令?,系统,管理,工作,命令,信息,基础,目录,工具,文件,操作,l

    linux常见操作命令?

    linux常见操作命令?,系统,工作,信息,管理,地址,命令,目录,单位,数据,标准,lin

    linux文件链接命令?

    linux文件链接命令?,系统,工作,地址,命令,网络,信息,工具,基础,管理,目录,lin

    linux命令行打印图标?

    linux命令行打印图标?,系统,信息,工具,服务,环境,地方,数字,网络,工作,命令,l

    linux命令文件授权?

    linux命令文件授权?,系统,工具,权限,文件,档案,数字,软件,信息,时间,电脑,lin

    linux删除命令文件夹?

    linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名

    打包文件命令linux?

    打包文件命令linux?,系统,时间,工具,名称,命令,文件,目录,格式,表示,详细信

    linux命令行文件夹?

    linux命令行文件夹?,系统,名称,文件夹,不了,命令,文件,名字,通用,数据,首次,l

    进入文件夹linux命令?

    进入文件夹linux命令?,系统,密码,终端,目录,标的,一致,传播,图片,环境,工作,l