我想在运行时在系统托盘中显示一个图标 [一个.ico文件],并添加一些文本。
有没有原生的WPF方法来实现这个?或者使用GDI+的片段也可以。
谢谢。
这是对我有效的代码:
public static Icon GetIcon(string text)
{
//Create bitmap, kind of canvas
Bitmap bitmap = new Bitmap(32, 32);
Icon icon = new Icon(@"Images\PomoDomo.ico");
System.Drawing.Font drawFont = new System.Drawing.Font("Calibri", 16, FontStyle.Bold);
System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
graphics.DrawIcon(icon, 0, 0);
graphics.DrawString(text, drawFont, drawBrush, 1, 2);
//To Save icon to disk
bitmap.Save("icon.ico", System.Drawing.Imaging.ImageFormat.Icon);
Icon createdIcon = Icon.FromHandle(bitmap.GetHicon());
drawFont.Dispose();
drawBrush.Dispose();
graphics.Dispose();
bitmap.Dispose();
return createdIcon;
}
由于系统托盘图标没有文字陪伴,您可以在图标本身上叠加文本,或者使用工具提示样式的弹出窗口。
叠加文本(可能通过将它嵌入到程序生成的图标中)是非常琐碎的,但更重要的是可能是个坏主意,因为图标最好用于显示分类状态信息,更详细信息可在弹出式文本或弹出式窗口中提供。
例如,如果一个图标代表收件箱状态,则仅显示“新邮件”与“无新邮件”即可,而无需显示新邮件数量。这允许显示更清晰的图标,用户不需要详细解读。
一个灰色地带是指示过程状态的图标。您可以只有“进行中”与“完成”两种图标,但我见过有进度条嵌入其中的图标,我认为这是个巧妙的方式。显然,在微小的图标中的进度条并不能真正显示精确数值数据,并且根据分辨率可以更接近表达分类数据(未完成、部分完成、完成)。
如果您决定采用此方法,则此链接应该会有所帮助:
如果您仍然觉得您的用例需要在图标上叠加文本,则我认为以程序方式生成图标将是实现它的方法。我认为您需要先将文本添加到图像中,然后将其转换为图标。以下链接应该对您有所帮助: