我正在使用c#编写WPF应用程序。我有时需要更改通知器图标;
我实现了这样的图标:
<tn:NotifyIcon x:Name="MyNotifyIcon"
Text="Title"
Icon="Resources/logo/Error.ico"/>
我的解决方案是更改Icon, MyNotifyIcon.Icon 的类型是ImageSource,我希望通过图标文件获取。我能找到办法做到这一点。
有人有一些想法如何?或者有其他解决方案吗?
很快,我有一个像 /Resource/logo.icon 这样的地址,我想要一个 System.Windows.Media.ImageSource
答案 0 :(得分:2)
您可以使用BitmapImage
类:
// Create the source
BitmapImage img = new BitmapImage();
img.BeginInit();
img.UriSource = new Uri("./Resource/logo/logo.icon");
img.EndInit();
BitmapImage
类继承自ImageSource
类,这意味着您可以将BitmapImage
对象传递给NotifyIcon.Icon
,如下所示:
NI.Icon = img;
答案 1 :(得分:1)
您是否正在使用Philipp Sumi创建的Hardcodet.Wpf.TaskbarNotification命名空间中的NotifyIcon?如果是这样,您可以选择将图标指定为ImageSource或图标。
TaskbarIcon notifyIcon = new TaskbarIcon();
// set using Icon
notifyIcon.Icon = some System.Drawing.Icon;
// set using ImageSource
notifyIcon.IconSource = some System.Windows.Media.ImageSource;
请注意,内部设置IconSource会设置Icon。
从资源设置。
notifyIcon.Icon = MyNamespace.Properties.Resources.SomeIcon
答案 2 :(得分:0)
您是否考虑过使用资源?
从资源中获取:
MainNameSpace.Properties.Resources.NameOfIconFileInResources;
将图标放在资源中,如果你有图像文件(不是图标)我有一个方法可以改变它:
public static Icon toIcon(Bitmap b)
{
Bitmap cb = (Bitmap) b.Clone();
cb.MakeTransparent(Color.White);
System.IntPtr p = cb.GetHicon();
Icon ico = Icon.FromHandle(p);
return ico;
}
以编程方式使用已知属性更改它.Icon; 不要担心ImageSource类型。
从图标(.ico)文件中提取图像:
Stream iconStream = new FileStream (MainNameSpace.Properties.Resources.NameOfIconFileINResources, FileMode.Open );
IconBitmapDecoder decoder = new IconBitmapDecoder (
iconStream,
BitmapCreateOptions.PreservePixelFormat,
BitmapCacheOption.None );
// loop through images inside the file
foreach ( var item in decoder.Frames )
{
//Do whatever you want to do with the single images inside the file
this.panel.Children.Add ( new Image () { Source = item } );
}
// or just get exactly the 4th image:
var frame = decoder.Frames[3];
// save file as PNG
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(frame);
using ( Stream saveStream = new FileStream ( @"C:\target.png", FileMode.Create ))
{
encoder.Save( saveStream );
}
但是你必须把.ico文件放在资源中,或者用相对路径把它...
取自How can you access icons from a Multi-Icon (.ico) file using index in C#