精华内容
下载资源
问答
  • WPF 托盘程序 DEMO

    2013-12-04 11:27:05
    WPF实现的最小化程序托盘中,初学者适用
  • WPF 托盘显示

    千次阅读 2019-06-29 09:24:59
    本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可以右击打开菜单,双击执行指定的代码

    本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可以右击打开菜单,双击执行指定的代码

    NotifyIcon WPF

    通过 Nuget 安装 Hardcodet.NotifyIcon.Wpf 可以快速做到在 WPF 显示托盘

    在这里插入图片描述

    因为托盘是程序的托盘,不是窗口的,所以推荐代码是写在 App.xaml.cs 里面

    先创建一个托盘的界面,界面在 App.xaml 创建

    托盘是需要图标的,可以从 Iconfont-阿里巴巴矢量图标库 找到好看的图标。在托盘图标需要是 16x16 32位 的 ico 文件

    将图片下载放在解决方案,修改为 Resource 就可以

    在 App.xaml 定义资源 TaskbarIcon 请看代码

    <Application x:Class="HouneaLeabeltezairKayballjachall.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:HouneaLeabeltezairKayballjachall"
                 xmlns:tb="http://www.hardcodet.net/taskbar"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <tb:TaskbarIcon x:Key="Taskbar"
                            IconSource="Taskbar.ico">
    
            </tb:TaskbarIcon>
        </Application.Resources>
    </Application>
    

    上面代码需要替换 Class="HouneaLeabeltezairKayballjachall.App" 为自己的项目

    打开 App.xaml.cs 获取资源,资源只有在获取的时候才会创建,创建了 TaskbarIcon 就会在托盘显示

            protected override void OnStartup(StartupEventArgs e)
            {
                _taskbar = (TaskbarIcon) FindResource("Taskbar");
                base.OnStartup(e);
            }
    
            private TaskbarIcon _taskbar;
    

    运行代码可以看到图片显示图标,下面的图片是我的图标

    鼠标移动在托盘上面显示文字,可以在 TaskbarIcon 添加代码

            <tb:TaskbarIcon x:Key="Taskbar"
                            ToolTipText="鼠标移动上显示的文字"
                            IconSource="Taskbar.ico">
    
            </tb:TaskbarIcon>
    

    双击托盘运行代码需要添加命令,创建一个 ViewModel 用来绑定命令

        public class DelegateCommand : ICommand
        {
            public Action CommandAction { get; set; }
            public Func<bool> CanExecuteFunc { get; set; }
    
            public void Execute(object parameter)
            {
                CommandAction();
            }
    
            public bool CanExecute(object parameter)
            {
                return CanExecuteFunc == null || CanExecuteFunc();
            }
    
            public event EventHandler CanExecuteChanged
            {
                add { CommandManager.RequerySuggested += value; }
                remove { CommandManager.RequerySuggested -= value; }
            }
        }
    
    

    添加一些功能,显示窗口,隐藏窗口

        public class NotifyIconViewModel
        {
            /// <summary>
            /// 如果窗口没显示,就显示窗口
            /// </summary>
            public ICommand ShowWindowCommand
            {
                get
                {
                    return new DelegateCommand
                    {
                        CanExecuteFunc = () => Application.Current.MainWindow == null,
                        CommandAction = () =>
                        {
                            Application.Current.MainWindow = new MainWindow();
                            Application.Current.MainWindow.Show();
                        }
                    };
                }
            }
    
            /// <summary>
            /// 隐藏窗口
            /// </summary>
            public ICommand HideWindowCommand
            {
                get
                {
                    return new DelegateCommand
                    {
                        CommandAction = () => Application.Current.MainWindow.Close(),
                        CanExecuteFunc = () => Application.Current.MainWindow != null
                    };
                }
            }
    
    
            /// <summary>
            /// 关闭软件
            /// </summary>
            public ICommand ExitApplicationCommand
            {
                get
                {
                    return new DelegateCommand { CommandAction = () => Application.Current.Shutdown() };
                }
            }
        }
    
    

    在界面绑定代码

            <tb:TaskbarIcon x:Key="Taskbar"
                            ToolTipText="鼠标移动上显示的文字"
                            DoubleClickCommand="{Binding ShowWindowCommand}"
                            IconSource="Taskbar.ico">
    
            </tb:TaskbarIcon>
    

    这时的 TaskbarIcon 还没有 ViewModel 可以通过下面的方式

            <tb:TaskbarIcon x:Key="Taskbar"
                            ToolTipText="鼠标移动上显示的文字"
                            DoubleClickCommand="{Binding ShowWindowCommand}"
                            IconSource="Taskbar.ico">
                <tb:TaskbarIcon.DataContext>
                    <local:NotifyIconViewModel />
                </tb:TaskbarIcon.DataContext>
            </tb:TaskbarIcon>
    

    现在双击就可以打开 MainWindow 因为默认 MainWindow 是打开的,比较难看到双击打开。在 App.xaml 去掉默认打开 MainWindow 需要找到下面的代码

    StartupUri="MainWindow.xaml"
    

    现在尝试不让默认打开 MainWindow 运行软件,可以看到托盘显示图标,双击图标才可以打开界面

    如果要右击显示菜单,需要在 App.xaml 添加定义

            <ContextMenu x:Shared="false" x:Key="SysTrayMenu">
                <MenuItem Header="显示窗口" Command="{Binding ShowWindowCommand}" />
                <MenuItem Header="关闭窗口" Command="{Binding HideWindowCommand}" />
                <Separator />
                <MenuItem Header="退出" Command="{Binding ExitApplicationCommand}" />
            </ContextMenu>
    

    在 TaskbarIcon 使用菜单

            <tb:TaskbarIcon x:Key="Taskbar"
                            ContextMenu="{StaticResource SysTrayMenu}"
                            ToolTipText="鼠标移动上显示的文字"
                            DoubleClickCommand="{Binding ShowWindowCommand}"
                            IconSource="Taskbar.ico">
                <tb:TaskbarIcon.DataContext>
                    <local:NotifyIconViewModel />
                </tb:TaskbarIcon.DataContext>
            </tb:TaskbarIcon>
    

    因为在 ViewModel 已经写好代码,所以现在就可以运行

    在这里插入图片描述

    默认的软件设置是关闭最后一个窗口的时候应用就关闭,通过设置 App.ShutdownMode 可以在调用退出才关闭,打开 App.xaml 添加代码

     ShutdownMode="OnExplicitShutdown"
    

    本文的代码

    WPF 托盘显示 右击打开菜单,双击打开软件-CSDN下载

    下面还有一些高级的使用

    定义托盘鼠标移动上去的文字颜色

                <tb:TaskbarIcon.TrayToolTip>
                     里面可以添加控件
                </tb:TaskbarIcon.TrayToolTip>
    
            <tb:TaskbarIcon x:Key="Taskbar"
                            ContextMenu="{StaticResource SysTrayMenu}"
                            DoubleClickCommand="{Binding ShowWindowCommand}"
                            IconSource="Taskbar.ico">
                <tb:TaskbarIcon.TrayToolTip>
                    <Border
                        Background="White"
                        BorderBrush="Orange"
                        BorderThickness="2"
                        CornerRadius="4"
                        Opacity="0.8"
                        Width="160"
                        Height="40">
                        <TextBlock
                            Text="hello world"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center" />
                    </Border>
                </tb:TaskbarIcon.TrayToolTip>
                <tb:TaskbarIcon.DataContext>
                    <local:NotifyIconViewModel />
                </tb:TaskbarIcon.DataContext>
            </tb:TaskbarIcon>
    
    

    因为可以添加控件,发挥你的想法,如添加按钮

            <tb:TaskbarIcon x:Key="Taskbar"
                            ContextMenu="{StaticResource SysTrayMenu}"
                            DoubleClickCommand="{Binding ShowWindowCommand}"
                            IconSource="Taskbar.ico">
                <tb:TaskbarIcon.TrayToolTip>
                    <Border
                        Background="White"
                        BorderBrush="Orange"
                        BorderThickness="2"
                        CornerRadius="4"
                        Opacity="0.8"
                        Width="160">
                       <Grid>
                           <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="可以放文字"></TextBlock>
                           <Button Margin="10,100,10,10" Content="可以放按钮"></Button>
                       </Grid>
                    </Border>
                </tb:TaskbarIcon.TrayToolTip>
                <tb:TaskbarIcon.DataContext>
                    <local:NotifyIconViewModel />
                </tb:TaskbarIcon.DataContext>
            </tb:TaskbarIcon>
    
    

    在这里插入图片描述

    显示气泡

    通过下面的代码可以显示气泡

    Taskbar.ShowBalloonTip("标题", "内容", BalloonIcon.Info);
    

    如果需要自定义气泡,定义一个继承 UIElement 的类,然后传入 TaskbarIcon.ShowCustomBalloon 就可以

    如已经定义了 FancyBalloon 气泡,可以通过下面的代码

     FancyBalloon balloon = new FancyBalloon();
     TaskbarIcon.ShowCustomBalloon(balloon, PopupAnimation.Slide, 4000 /*多少时间就隐藏*/);
    

    代码:NotifyIcon WPF — Bitbucket

    我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

    如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • WPF托盘化最小化

    2013-08-23 14:12:56
    WPF托盘化最小化
  • wpf 托盘

    2016-01-19 16:38:00
    注意这段中引用的是资源文件,图片会打包到程序里面,不用带着图片到处跑。 notifyIcon.Icon = new System.Drawing.Icon(Application.GetResourceStream( new Uri( " /BDT.Monitor;component/Resources/img/...

     

    代码网上有很多,具体如下:

    记得添加引用:

    System.Drawing
    System.Windows.Forms
     /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private System.Windows.Forms.NotifyIcon notifyIcon = null;
            public MainWindow()
            {
                InitializeComponent();
                InitialNotifyIcon();
            }
            private void InitialNotifyIcon()
            {
                this.Visibility = Visibility.Hidden;
    
                notifyIcon = new System.Windows.Forms.NotifyIcon();
                notifyIcon.BalloonTipText = "边界数据传输已启动";
                notifyIcon.Text = "边界数据传输";
    
                notifyIcon.Icon = new System.Drawing.Icon(Application.GetResourceStream(new Uri("/BDT.Monitor;component/Resources/img/favicon.ico", UriKind.Relative)).Stream);
                notifyIcon.Visible = true;
                notifyIcon.ShowBalloonTip(2000);
                notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);
    
                //添加菜单项
                System.Windows.Forms.MenuItem setting = new System.Windows.Forms.MenuItem("监控");
                System.Windows.Forms.MenuItem exit = new System.Windows.Forms.MenuItem("退出");
                exit.Click += new EventHandler(exit_Click);
    
                //添加关联
                System.Windows.Forms.MenuItem[] childen = new System.Windows.Forms.MenuItem[] { setting, exit };
                notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu(childen);
    
                this.StateChanged += new EventHandler(Win_StateChanged);
            }
    
            /// <summary>
            /// 鼠标单击
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                //如果鼠标左键单击
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                {
                    if (this.Visibility == Visibility.Visible)
                    {
                        this.Visibility = Visibility.Hidden;
                    }
                    else
                    {
                        this.Visibility = Visibility.Visible;
                        this.Activate();
                    }
                }
            }
    
            /// <summary>
            /// 窗体状态改变时候触发
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Win_StateChanged(object sender, EventArgs e)
            {
                if (this.WindowState == WindowState.Minimized)
                {
                    this.Visibility = Visibility.Hidden;
                }
            }
    
    
            /// <summary>
            /// 退出
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void exit_Click(object sender, EventArgs e)
            {
                if (System.Windows.MessageBox.Show("sure to exit?",
                                                   "application",
                                                    MessageBoxButton.YesNo,
                                                    MessageBoxImage.Question,
                                                    MessageBoxResult.No) == MessageBoxResult.Yes)
                {
                    System.Windows.Application.Current.Shutdown();
                }
            }
        }

     

    注意这段中引用的是资源文件,图片会打包到程序里面,不用带着图片到处跑。

    notifyIcon.Icon = new System.Drawing.Icon(Application.GetResourceStream(new Uri("/BDT.Monitor;component/Resources/img/favicon.ico", UriKind.Relative)).Stream);

     

    转载于:https://www.cnblogs.com/Fady/p/5142635.html

    展开全文
  • WPF托盘图标自定义右键菜单。

    千次阅读 2018-03-05 15:29:00
    原文地址:http://blog.csdn.net/doitplayer/article/details/72846381根据此方法,可以实现WPF自定义托盘区右键菜单样式的功能,但存在一个问题,就是在弹出菜单后,点击桌面空白处,菜单无法收回。因此,通过实验...

    原文地址:http://blog.csdn.net/doitplayer/article/details/72846381

    根据此方法,可以实现WPF自定义托盘区右键菜单样式的功能,但存在一个问题,就是在弹出菜单后,点击桌面空白处,菜单无法收回。

    因此,通过实验,如上问题,可以通过如下方式解决。

         /// <summary>  
            /// 鼠标单击  
            /// </summary>  
            /// <param name="sender"></param>  
            /// <param name="e"></param>  
            private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)  
            {  
                //如果鼠标左键单击  
                if (e.Button == MouseButtons.Right)  
                {
      System.Windows.Controls.ContextMenu NotifyIconMenu = (System.Windows.Controls.ContextMenu)this.FindResource("NotifyIconMenu"); 
                    NotifyIconMenu.IsOpen = true;
                    App.Current.MainWindow.Activate();//当点击托盘图标后,会使应用失去焦点,本句使应用程序重新获取焦点 
                 
    
                 }
            }

    同时添加App.Current.Deactivated += app_Deactivated;监测应用程序非活动事件。代码如下:

            private void app_Deactivated(object sender, EventArgs e)
            {
                Console.WriteLine("应用程序失去了焦点!!!!!");
                Popup menu = (Popup)gridMain.FindResource("NotifyIconMenu");
                if (menu.IsOpen == true)
                {
                    menu.IsOpen = false;
                }
            }
    当应用程序失去焦点时,使菜单收回。
    展开全文
  • 我想快速给WPF程序添加托盘菜单 1 简单要求: 使用开源控件库 在XAML中声明托盘菜单,就像给控件添加ContextMenu一样 封装了常用命令,比如:打开主窗体、退出应用程序等 我在TerminalMACS中添加了托盘菜单,...

    我想快速给WPF程序添加托盘菜单

    我想...

    1 简单要求:

    • 使用开源控件库
    • 在XAML中声明托盘菜单,就像给控件添加ContextMenu一样
    • 封装了常用命令,比如:打开主窗体、退出应用程序等

    TerminalMACS

    我在TerminalMACS中添加了托盘菜单,最终实现的托盘菜单效果:

    TerminalMACS中实现的托盘菜单

    完整效果

    2 如何做?

    【Step 1】在已创建的WPF项目中,添加HandyControl库,并安装:

    Nuget中搜索HandyControl

    你问我为什么要使用HC控件库?先看Demo效果:

    常规菜单

    图形化菜单

    闪烁的托盘菜单图标

    常用的托盘效果应该都能满足了吧?而实现这些效果,我们自己要码的代码真的不多,因为HC已经封装了,我们直接使用即可。

    【Step 2】在窗体中添加HandyControl命名空间

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

    【Step 3】声明托盘菜单关键的19行代码

    <hc:NotifyIcon x:Name="NotifyIconContextContent" 
                       Text="{markup:I18n {x:Static i18NResources:Language.AppTitle}}"
                       Visibility="Visible"
                       Icon="/Images/logo.ico">
                <hc:NotifyIcon.ContextMenu>
                    <ContextMenu>
                        <MenuItem Command="hc:ControlCommands.PushMainWindow2Top" Header="{markup:I18n {x:Static i18NResources:Language.PushMainWindow2Top}}"/>
                        <MenuItem Command="hc:ControlCommands.ShutdownApp" Header="{markup:I18n {x:Static i18NResources:Language.Exit}}"/>
                    </ContextMenu>
                </hc:NotifyIcon.ContextMenu>
                <hc:Interaction.Triggers>
                    <hc:EventTrigger EventName="Click">
                        <hc:EventToCommand Command="hc:ControlCommands.PushMainWindow2Top"/>
                    </hc:EventTrigger>
                </hc:Interaction.Triggers>
            </hc:NotifyIcon>
    

    上面的代码,一个托盘菜单基本上算完事了,简单说一下:

    • NotifyIcon为托盘菜单控件,Text显示托盘菜单名称,将鼠标放在托盘图标上,ToolTip显示该字符串,一般显示应用程序名称,如下图:

    托盘菜单显示应用名称

    • hc:NotifyIcon.ContextMenu 用于声明菜单项,本项目目前加了打开主窗体、退出应用程序两个菜单,而这两个菜单对应的命令HC已经封装,方便使用。
    • 另外,单击托盘菜单,也可弹出应用程序主窗口

    【Step 4】手动关闭主窗体时,隐藏而不退出

    添加了托盘菜单后,在关闭主窗体时,应该重写OnClosing事件,隐藏主窗体,而不是直接关闭它。

    protected override void OnClosing(CancelEventArgs e)
    {
        this.Hide();
        e.Cancel = true;
    }
    

    3 更多参考

    更多Demo源码请参考 HandyControl

    本文源码TerminalMACS

    展开全文
  • VS2010WPF程序最小化到托盘的例子VS2010,WPF,最小化,托盘
  • wpf做的一个简单托盘效果程序 点击关闭程序后 会在电脑右下角的任务栏里出现一个托盘,双击后会再次显示该程序
  • WPF程序添加托盘图标,菜单的方法

    千次阅读 2013-07-02 11:00:23
    前段时间做项目,客户需要程序最小化时到托盘,并添加托盘菜单,可以做退出,打开灯操作。 首先需要定义一个类。托盘菜单可用的。 using System; using System.Collections.Generic; using System.Component...
  • WpfApplication1 { /// /// Represents a thin wrapper for /// [ContentProperty( " Text " )] [DefaultEvent( " MouseDoubleClick " )] public class NotificationAreaIcon : ...
  • 如何在C#和WPF中创建基本的系统任务栏应用程序
  • 我想快速给WPF程序添加托盘菜单1 简单要求:使用开源控件库在XAML中声明托盘菜单,就像给控件添加ContextMenu一样封装了常用命令,比如:打开主窗体、退出应用程序等我在TerminalMACS中添加了托盘菜单,最终实现的...
  • 最近都没怎么接触WPF了,闲来无事为以前做的WPF DEMO添加托盘管理。http://www.cnblogs.com/leeolevis/archive/2010/07/14/1777658.html其中,主要添加了NotificationAreaIcon类,代码如下:usingSystem;usingSystem...
  • 如何在C#和WPF中创建基本的系统任务栏应用程序
  • 一个使用 Awesomium 的简单 WPF 应用程序,它封装了一个网站/网络应用程序并能够最小化到系统托盘 - 我用它来制作一个简单的 Windows Slack 客户端 系统托盘代码非常基本 - 它只是使用 Windows Forms NotifyIcon 类...
  • 2019-6-23-WPF-托盘显示

    2019-11-21 16:09:03
    title author date CreateTime categories WPF 托盘显示 lindexi 2019-06-23 11:52:36 +0800 2018-11-21 11:19:33 +0800 WPF ...本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可...
  • WPF托盘图标的设定

    2018-11-11 13:07:00
    WPF托盘图标的设定 原文:WPF托盘图标的设定首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Collections.Generic; using System.Linq; using System....
  • wpf 最小化托盘

    千次阅读 2017-03-02 17:17:33
    //关联托盘控件 System.Windows.Forms.MenuItem[] childen = new System.Windows.Forms.MenuItem[] { open,hide, exit }; _notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu(childen); //双击...
  • WPF便利贴程序

    2012-07-07 23:13:29
    这是一个用WPF编写的便利贴程序,可以给自己留便利贴,也可以向局域网上的其他人发送便利贴。...其中涉及到WPF、动画、C#局域网通信、WPF样式、模板、Windows托盘程序等技术点,这个小程序含的点还是比较多的,哈哈!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 512
精华内容 204
关键字:

wpf托盘程序