我想在系统托盘中显示一个图标[.ico文件],并在运行时添加一些文本。 是否有任何原生WPF方式可以做到这一点?或GDI +的片段也将不胜感激。
谢谢。
答案 0 :(得分:5)
以下代码对我有用,
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;
}
答案 1 :(得分:0)
由于系统托盘图标没有附带文本,因此您可以在图标上叠加文本,也可以使用工具提示式弹出窗口。
覆盖文本(可能通过将其嵌入程序生成的图标中)会非常繁琐,但更重要的是可能是一个坏主意,因为图标最适合用于显示分类状态信息,更多详细信息可用于弹出式文档文本或弹出窗口。
例如,如果图标表示收件箱状态,则显示“新邮件”与“无新邮件”就足够了,而无需显示新邮件的数量。这样就可以显示更清晰的图标,而不需要用户详细解读。
灰色区域是指示进程状态的图标。你可以只使用“进行中”而不是“完整”图标,但我已经看到嵌入了进度条的图标,我认为这是一种巧妙的方式。很明显,微小图标中的进度条并没有真正显示精确的数字数据,并且可以更接近于根据分辨率表达分类数据(根本没有完成,部分完成,完成)。
如果您决定采用这种方法,那么此链接应该有所帮助:
如果您仍然认为您的用例值得在图标上叠加文本,那么我认为在程序上生成图标将是实现此目的的方法。我想你首先需要将文本添加到图像中,然后将其转换为图标。这些链接可以帮助您: