WPF 如何添加系统托盘

1.使用Nuget 添加 handycontrol

cs xmlns:hc="https://handyorg.github.io/handycontrol"

2.窗体添加控件
cs <hc:NotifyIcon x:Name="NotifyIconContextContent" Text="软件名称" ContextMenu="{StaticResource ContextMenu}" Click="NotifyIconContextContent_Click"> </hc:NotifyIcon>

3.最小化隐藏窗体
cs private void btnMinimize_Click(object sender, RoutedEventArgs e) { WindowState = WindowState.Minimized; ShowInTaskbar = false; }

4.单机托盘显示窗体

cs 复制代码
 if (!IsVisible)
 {
     Show();
 }

 if (WindowState == WindowState.Minimized)
 {
     WindowState = WindowState.Normal;
 }

 Activate();
 Topmost = true;  // important
 Topmost = false; // important
 Focus();         // important

示例

  • xaml
cs 复制代码
<Window x:Class="NBApi.Configurator.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:hc="https://handyorg.github.io/handycontrol"
        mc:Ignorable="d"
        Title="NBAPI4PO Configurator" Height="720" Width="870"
        prism:ViewModelLocator.AutoWireViewModel="True"
        WindowStartupLocation="CenterScreen" WindowStyle="None"
        Background="Transparent" AllowsTransparency="True"
        ResizeMode="NoResize" WindowState="Normal" >
    <b:Interaction.Triggers>
        <b:EventTrigger EventName="Loaded">
            <b:InvokeCommandAction Command="{Binding LoadedWindowCommand}"/>
        </b:EventTrigger>
    </b:Interaction.Triggers>
    <Window.Resources>
        <ContextMenu x:Key="ContextMenu">

            <MenuItem Click="MenuItem_Click"  Header="开机自启"/>
            <Separator></Separator>
            <MenuItem Click="MenuItem_Click_1"  Header="最小化到托盘" />

            <MenuItem Click="MenuItem_Click_2"  Header="退出软件"/>

        </ContextMenu>
    </Window.Resources>
    <Border CornerRadius="8" Background="{DynamicResource PrimaryBackgroundColor}" BorderThickness="1" BorderBrush="#D8D8D8">
        <Grid>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="78"/>
                    <RowDefinition/>
                    <RowDefinition Height="60"/>
                </Grid.RowDefinitions>
                <Border Grid.Row="0"  
                        BorderThickness="0 0 0 8" BorderBrush="#4DC253" />
                <hc:NotifyIcon x:Name="NotifyIconContextContent"  Text="软件名称"
                ContextMenu="{StaticResource ContextMenu}" Click="NotifyIconContextContent_Click">
                    
                </hc:NotifyIcon>
//your UI elements
            </Grid>
        </Grid>
    </Border>
</Window>
  • cs
cs 复制代码
namespace NBApi.Configurator.Views;

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
// ReSharper disable once RedundantExtendsListEntry
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void btnClose_Click(object sender, RoutedEventArgs e)
    {
        Close();
    }

    private void btnRestore_Click(object sender, RoutedEventArgs e)
    {
        if (WindowState == WindowState.Normal)
        {
            WindowState = WindowState.Maximized;
            ShowInTaskbar = false;
        }
        else
            WindowState = WindowState.Normal;

    }

    private void btnMinimize_Click(object sender, RoutedEventArgs e)
    {
        WindowState = WindowState.Minimized;
        ShowInTaskbar = false;
    }


    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {

    }

    private void MenuItem_Click_1(object sender, RoutedEventArgs e)
    {

    }

    private void MenuItem_Click_2(object sender, RoutedEventArgs e)
    {

    }

    private void NotifyIconContextContent_Click(object sender, RoutedEventArgs e)
    {
        if (!IsVisible)
        {
            Show();
        }

        if (WindowState == WindowState.Minimized)
        {
            WindowState = WindowState.Normal;
        }

        Activate();
        Topmost = true;  // important
        Topmost = false; // important
        Focus();         // important
    }
}
相关推荐
Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
柒.梧.6 天前
基于SpringBoot+JWT 实现Token登录认证与登录人信息查询
wpf
十月南城9 天前
Flink实时计算心智模型——流、窗口、水位线、状态与Checkpoint的协作
大数据·flink·wpf
听麟11 天前
HarmonyOS 6.0+ 跨端会议助手APP开发实战:多设备接续与智能纪要全流程落地
分布式·深度学习·华为·区块链·wpf·harmonyos
@hdd11 天前
Kubernetes 可观测性:Prometheus 监控、日志采集与告警
云原生·kubernetes·wpf·prometheus
zls36536512 天前
C# WPF canvas中绘制缺陷分布map
开发语言·c#·wpf
专注VB编程开发20年12 天前
c#Redis扣款锁的设计,多用户,多台电脑操作
wpf
闲人编程13 天前
定时任务与周期性调度
分布式·python·wpf·调度·cron·定时人物·周期性
zls36536513 天前
C# WPF canvas中绘制缺陷分布map并实现缩放
开发语言·c#·wpf
数据知道14 天前
PostgreSQL:Citus 分布式拓展,水平分片,支持海量数据与高并发
分布式·postgresql·wpf