WPF 如何添加系统托盘

发布于:2025-02-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

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.单机托盘显示窗体

 if (!IsVisible)
 {
     Show();
 }

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

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

示例

  • xaml
  • <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
  • 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
        }
    }


网站公告

今日签到

点亮在社区的每一天
去签到