This post is a continuation of my exploration of Electron.NET which started with this post. Today I’m going to take the existing sample project and expand it to include a tray icon. As with the post on customizing the application level menus, this post relied heavily on the Electon.NET API Demos repo.
Add an Icon
The first step I took was to find an icon I wanted to show in the tray area. Since this is just a sample application I didn’t spend a lot of time on this. Once you have your icon it needs to be added to your project. Following the example, in the API Demo, I add an Assets
 directory to the top level of the project and copied in my Stock-Person.png
 file. This directory and file need to end up in the output of the builds which can be done by adding the following to the csproj
 file.
<ItemGroup> <None Update="Assets\Stock-Person.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
In Visual Studio this can be done via the UI, but since I am sticking to VS Code for this project I did the edit manually.
Tray Controller
Add a TrayController
 to the Controllers
 directory which will be used to hold all the code needed to add the tray icon. The following is the full class.
public class TrayController : Controller { public IActionResult Index() { if (!HybridSupport.IsElectronActive || Electron.Tray.MenuItems.Count != 0) { return Ok(); } var menu = new MenuItem[] { new MenuItem { Label = "Create Contact", Click = () => Electron .WindowManager .BrowserWindows .First() .LoadURL($"http://localhost:{BridgeSettings.WebPort}/Contacts/Create") }, new MenuItem { Label = "Remove", Click = () => Electron.Tray.Destroy() } }; Electron.Tray.Show("/Assets/Stock-Person.png", menu); Electron.Tray.SetToolTip("Contact Management"); return Ok(); } }
Most of the code above is dealing with building an array of MenuItem
 which will be options when right-clicking the tray icon. In this case of this sample, there will be two menu items one for creating a contact and the other to remove the tray icon.
Electron.Tray.Show
 is the bit that actually shows the tray icon and it takes a path for the icon to display and the menu items to show. The last bit is a call to Electron.Tray.SetToolTip
 which, not surprisingly, sets the tooltip on the tray icon.
Include the tray icon
The final change is to make sure the code to show the tray icon gets run when the application starts. Open the _Layout.cshtml
 file in the Views/Shared
 directory. In the head
 tag add the following which will cause the application to call the Index
 action on the TrayController
.
<link rel="import" href="Tray">
Wrapping Up
As with everything I have tried so far, Electon.NET makes it easy to add a tray icon to your applications. If you are a .NET developer so far I haven’t found any downsides to using Electron.NET. If you have hit any walls with this tool leave a comment. The finished code for this post can be found here.
Also published on Medium.
Hello Eric
Brilliant article. I just added this to get my icon to appear. It wouldn’t appear without adding it.
// Show Tray
Electron.Tray.Show(Path.Combine(_env.ContentRootPath, “Assets/smallicon.png”),
menu);
Regards,
Simon
Thank you, Simon!
Hey man, appreciate the article.
Is there maybe a way to make the tray not show the menu on left click, but rather just show the app?
This is what I use to show the app:
Electron.WindowManager.BrowserWindows.First().Hide();
I really can’t find a way to do so, I hope you’re still watching this blog!