• Stars
    star
    332
  • Rank 126,957 (Top 3 %)
  • Language
    C#
  • License
    MIT License
  • Created almost 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

TrayIcon for WPF/WinUI/Uno.

README

H.NotifyIcon

** This project is a continuation of the inactive base project to other platforms (WinUI/Uno.Skia.Wpf/Console) - ❤️ https://github.com/hardcodet/wpf-notifyicon ❤️ **

This is an implementation of a NotifyIcon (aka system tray icon or taskbar icon) for .Net 6 WPF/WinUI/Uno.Skia.WPF/Console platforms. It does not just rely on the Windows Forms NotifyIcon component, but is a purely independent control which leverages several features of the WPF/WinUI frameworks in order to display rich tooltips, popups, context menus, and balloon messages. It can be used directly in code or embedded in any XAML file.

Features

NuGet

NuGet NuGet NuGet NuGet

Install-Package H.NotifyIcon.Wpf
Install-Package H.NotifyIcon.WinUI
Install-Package H.NotifyIcon.Uno
Install-Package H.NotifyIcon.Uno.WinUI
# If you need other platforms, you can use this Core library - 
# it allows you to make NotifyIcon even in a console application.
Install-Package H.NotifyIcon

Usage

<Window
    xmlns:tb="clr-namespace:H.NotifyIcon;assembly=H.NotifyIcon.Wpf" // WPF
    xmlns:tb="using:H.NotifyIcon" // WinUI
    >
    <tb:TaskbarIcon
        ToolTipText="ToolTip"
        IconSource="/Images/TrayIcons/Logo.ico"
        ContextMenu="{StaticResource TrayMenu}"
        MenuActivation="LeftOrRightClick"
        TrayPopup="{StaticResource TrayStatusPopup}"
        PopupActivation="DoubleClick"
        TrayToolTip="{StaticResource TrayToolTip}"
        />
</Window>

Efficiency Mode image

Windows 11 introduces a new concept called Efficiency Mode.
Since, basically, this library is intended for applications to exist in the background with the ability to interact through TrayIcon, the library implements an API for this mode:

EfficiencyModeUtilities.SetEfficiencyMode(bool value)
WindowExtensions.Hide(this Window window, enableEfficiencyMode: true) // default value
WindowExtensions.Show(this Window window, disableEfficiencyMode: true) // default value
TaskbarIcon.ForceCreate(bool enablesEfficiencyMode = true) // default value

Generated icons

Example 1: image

<tb:TaskbarIcon>
    <tb:TaskbarIcon.IconSource>
        <tb:GeneratedIconSource
            Text="❤️"
            Foreground="Red"
            />
    </tb:TaskbarIcon.IconSource>
</tb:TaskbarIcon>

Example 2: image

<tb:TaskbarIcon
    IconSource="/Icons/Error.ico"
    >
    <tb:TaskbarIcon.IconSource>
        <tb:GeneratedIconSource
            Text="5"
            Foreground="Black"
            FontSize="36"
            FontWeight="Bold"
            />
    </tb:TaskbarIcon.IconSource>
</tb:TaskbarIcon>

Example 3: image

<tb:TaskbarIcon>
    <tb:TaskbarIcon.IconSource>
        <tb:GeneratedIconSource
            Text="❤️"
            Foreground="Red"
            FontFamily="Segoe UI Emoji"
            Background="AliceBlue"
            FontWeight="Bold"
            FontSize="38"
            />
    </tb:TaskbarIcon.IconSource>
</tb:TaskbarIcon>

Example 4: image

<tb:TaskbarIcon>
    <tb:TaskbarIcon.IconSource>
        <tb:GeneratedIconSource
            Text="❤️"
            BorderThickness="5"
            FontSize="46"
            >
            <tb:GeneratedIconSource.Foreground>
                <LinearGradientBrush StartPoint="0,0" EndPoint="128,128">
                    <GradientStop Color="White" />
                    <GradientStop Color="Red" />
                </LinearGradientBrush>
            </tb:GeneratedIconSource.Foreground>
            <tb:GeneratedIconSource.BorderBrush>
                <LinearGradientBrush StartPoint="0,0" EndPoint="128,128">
                    <GradientStop Color="White" />
                    <GradientStop Color="Red" />
                </LinearGradientBrush>
            </tb:GeneratedIconSource.BorderBrush>
        </tb:GeneratedIconSource>
    </tb:TaskbarIcon.IconSource>
</tb:TaskbarIcon>

Design-Time Access

It is recommended to pin the designer icon for easy viewing. To do this, go to Taskbar Settings -> Other system tray icons and enable this icon:
image

WinUI Context menu

At the moment, three modes are implemented, each with its own pros and cons.

  1. Based on your MenuFlyout, a Win32 PopupMenu will be created that will call the commands attached to your MenuFlyoutItem. This is the default. image
  2. The menu will be created in your open window, in the corner of the screen.
  3. A second transparent window will be created and used to render the native menu.. At the moment it is in the preview stage. To do this you need to explicitly set ContextMenuMode="SecondWindow"
    image

Availability of various options(depends on the version of WindowsAppSDK you are using):

Option Packaged App Unpackaged App
Transparency 🟢 from 1.1.0-preview 🟢 from 1.1.0-preview
Borderless 🔷 🟢 from 1.1.0-preview
Animations 🟢, but with borders 🟢 from 1.1.0-preview
Submenus 🔷 🔷

Behavior that needs attention

  1. This implementation currently uses the Guid associated with each TrayIcon. The default is a hash function that creates a unique Guid based on the path to your file, because Windows associates the guid with the current path when TrayIcon is registered. The only way to keep the settings when changing the file path is to use Authenticode. Read more here: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/ns-shellapi-notifyicondataa#troubleshooting

Support

Priority place for bugs: https://github.com/HavenDV/H.NotifyIcon/issues\ Priority place for ideas and general questions: https://github.com/HavenDV/H.NotifyIcon/discussions\ I also have a Discord support channel:
https://discord.gg/g8u2t9dKgE

More Repositories

1

H.Pipes

A simple, easy to use, strongly-typed, async wrapper around .NET named pipes.
C#
169
star
2

H.Socket.IO

This is the Socket.IO client for .NET, which is based on ClientWebSocket, provide a simple way to connect to the Socket.IO server. The target framework is .NET Standard 2.0
C#
83
star
3

DependencyPropertyGenerator

Dependency property, routed event and weak event source generator for WPF/UWP/WinUI/Uno/Avalonia/MAUI platforms.
C#
62
star
4

H.InputSimulator

Allows you to simulate global mouse and keyboard events.
C#
45
star
5

H.OxyPlot

UWP/WinUI/Uno support for OxyPlot
C#
20
star
6

H.Ipc

C# Source Generator library for Inter-Process Communication
C#
16
star
7

H.Hooks

Contains LowLevelKeyboardHook and LowLevelMouseHook.
C#
16
star
8

H.NSwag.Generator

C# Source Generator for NSwag.
C#
14
star
9

Mvvm.CommonInteractions

Common Interactions(like open/save file) for WPF/UWP/WinUI/Uno/Avalonia/MAUI platforms
C#
12
star
10

QtPackage

This addon fully implement Qt VS Addin
HTML
11
star
11

H.XamlExtensions

Shortest way to create rows/columns for Grid for WPF/UWP/WinUI/Uno platforms
C#
9
star
12

H.DynamicColumns

Adds support for dynamic columns to DataGrid for WPF/UWP/Uno platforms.
C#
8
star
13

OpenAIGenerator

Source generator, which allows you to add prompts from which code will be generated in deterministic mode
C#
6
star
14

NamedPipeServerStream.NetFrameworkVersion

.NET Standard version of NamedPipeServerStream that contains PipeSecurity constructor.
C#
5
star
15

H.ProxyFactory

Allows creating proxy objects that look exactly like the original objects.
C#
4
star
16

UpworkPdfGenerator

Allows you to programmatically fill out pdf forms for Upwork.
C#
4
star
17

H.Vpn

C# high-level VPN library
C#
4
star
18

EventGenerator

Generates events, OnEvent() methods and EventArgs classes
C#
3
star
19

clucene

Clucene VS 2015 fix for this job - https://www.upwork.com/jobs/~01ba8f543004940006
C++
3
star
20

WixSharp.DotNetBootstrapper

Allows you to create a bootstrapper for an MSI file in one line, simply by specifying the required .Net version
C#
3
star
21

H.Generators.Extensions

A set of extensions to simplify the code of generators
C#
3
star
22

FlaUI.Fluent

Fluent interface for FlaUI find queries
C#
2
star
23

workflows

Reusable workflows
2
star
24

SkipLocalsInit

Enables SkipLocalsInit by simply specifying the dev NuGet package
C#
2
star
25

OpenCVManager

OpenCV libraries manager
C#
2
star
26

KakaoTalkBot

C#
2
star
27

MoexIIS

C# client library and OpenAPI spec for Moex IIS
C#
2
star
28

ViewBaseGenerator

Generates boiler-plate code for constructors or ViewBase classes for WPF/UWP/WinUI/Uno projects.
C#
2
star
29

WebScraperForSpaFinder

For this job: https://www.upwork.com/jobs/~01ea04d8c223682adb
C#
1
star
30

WebScraperForAlphaBroder

C#
1
star
31

ListBoxApplication

For this job - https://www.upwork.com/jobs/_~016b3600007a4ccc17/
C#
1
star
32

Launcher

For this job - https://www.upwork.com/jobs/~016935a9668d8351ae
C#
1
star
33

FullContactDownloader

For this job - https://www.upwork.com/jobs/~01e2eb66aabf866083
C#
1
star
34

AutoSegment

C#
1
star
35

H.Controls

Common WPF, UWP and Uno controls
C#
1
star
36

Uno.Issues

Source control for various problems in Uno
C#
1
star
37

CSharpProjectTemplate

The template repository for C# projects
C#
1
star
38

ExpressionsRecognitor

C#
1
star
39

McMasterDownloader

C#
1
star
40

FileFinder

File Finder for https://www.upwork.com/jobs/~01fb3187190c8b598a
C#
1
star
41

NuGet.NativeLibraries

NuGet packages containing native DLLs.
C#
1
star
42

ClearComApi

Generated API for ClearCom and tests
C#
1
star
43

AcidBaseDiagram

For this job - https://www.upwork.com/jobs/~016f93cdfb5a9b35f3
C#
1
star
44

fluorinefx

fluorinefx with latest .Net support
C#
1
star
45

PngOutliner

C#
1
star
46

DataProtection

C#
1
star
47

veryfi-csharp

This is the official C# client library for communicating with the Veryfi OCR API.
C#
1
star
48

MakeRuler

C#
1
star
49

DanteWrapper

C
1
star
50

MotionDetector

Finds motion on a video and saves it as images
C#
1
star
51

UpworkNotifier

C#
1
star
52

H.Containers

Contains many projects that are aimed at dynamically executing code (including running code in another process)
C#
1
star
53

HavenDV

1
star
54

ImageSourceLoader

Allows you to efficiently get byte[]/Stream from ImageSource for different platforms (WPF/WinUI/Uno/MAUI)
1
star