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
    }
}
相关推荐
huizhixue-IT7 小时前
华为存储考试内容&HCIP-Storage
wpf
桂月二二1 天前
实时事件流处理架构的容错设计
架构·wpf
源之缘-OFD先行者1 天前
GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台
.net·wpf·ads-b
Marzlam1 天前
WPF学习路线
wpf
weixin_535455791 天前
WPF设计学习记录滴滴滴2
学习·wpf
^@^lemon tea^@^1 天前
WPF 浅述IsHitTestVisible属性
wpf·wpf 穿透
lixy5791 天前
C# WPF 命令机制(关闭CanExecute自动触发,改手动)
c#·wpf
Marzlam2 天前
一文了解WPF技术简介
wpf
arriettyandray2 天前
C#/WPF学习系列之问题记录——使用不流畅
c#·wpf
勘察加熊人3 天前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf