using System.Windows; namespace DeskCore; /// Symbol im Infobereich der Taskleiste. public sealed class Tray : IDisposable { private readonly System.Windows.Forms.NotifyIcon _icon; /// Linksklick public event Action? Clicked; /// Rechtsklick – Kontextmenü wird von der WPF-Seite gezeigt (sieht moderner aus) public event Action? MenuRequested; public event Action? BalloonClicked; public Tray() { var stream = Application.GetResourceStream(new Uri("pack://application:,,,/app.ico"))!.Stream; _icon = new System.Windows.Forms.NotifyIcon { Icon = new System.Drawing.Icon(stream, System.Windows.Forms.SystemInformation.SmallIconSize), Text = "DeskCore", }; _icon.MouseUp += (_, e) => { if (e.Button == System.Windows.Forms.MouseButtons.Left) Clicked?.Invoke(); else if (e.Button == System.Windows.Forms.MouseButtons.Right) MenuRequested?.Invoke(); }; _icon.BalloonTipClicked += (_, _) => BalloonClicked?.Invoke(); } public bool Visible { get => _icon.Visible; set => _icon.Visible = value; } public void Notify(string title, string text) { if (!_icon.Visible) return; _icon.ShowBalloonTip(3000, title, text, System.Windows.Forms.ToolTipIcon.None); } public void Dispose() { _icon.Visible = false; _icon.Dispose(); } }