我想快速给WPF程序添加托盘菜单
1 簡單要求:
使用開源控件庫
在XAML中聲明托盤菜單,就像給控件添加ContextMenu一樣
封裝了常用命令,比如:打開主窗體、退出應(yīng)用程序等
我在TerminalMACS中添加了托盤菜單,最終實(shí)現(xiàn)的托盤菜單效果:
TerminalMACS中實(shí)現(xiàn)的托盤菜單完整效果2 如何做?
【Step 1】在已創(chuàng)建的WPF項(xiàng)目中,添加HandyControl庫,并安裝:
Nuget中搜索HandyControl你問我為什么要使用HC控件庫?先看Demo效果:
常規(guī)菜單圖形化菜單閃爍的托盤菜單圖標(biāo)常用的托盤效果應(yīng)該都能滿足了吧?而實(shí)現(xiàn)這些效果,我們自己要碼的代碼真的不多,因?yàn)镠C已經(jīng)封裝了,我們直接使用即可。
【Step 2】在窗體中添加HandyControl命名空間
xmlns:hc="https://handyorg.github.io/handycontrol"【Step 3】聲明托盤菜單關(guān)鍵的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顯示托盤菜單名稱,將鼠標(biāo)放在托盤圖標(biāo)上,ToolTip顯示該字符串,一般顯示應(yīng)用程序名稱,如下圖:
hc:NotifyIcon.ContextMenu 用于聲明菜單項(xiàng),本項(xiàng)目目前加了打開主窗體、退出應(yīng)用程序兩個菜單,而這兩個菜單對應(yīng)的命令HC已經(jīng)封裝,方便使用。
另外,單擊托盤菜單,也可彈出應(yīng)用程序主窗口
【Step 4】手動關(guān)閉主窗體時,隱藏而不退出
添加了托盤菜單后,在關(guān)閉主窗體時,應(yīng)該重寫OnClosing事件,隱藏主窗體,而不是直接關(guān)閉它。
protected override void OnClosing(CancelEventArgs e){ this.Hide(); e.Cancel = true;}3 更多參考
更多Demo源碼請參考?HandyControl[1]
本文源碼TerminalMACS[2]
[1]
HandyControl托盤菜單:?https://github.com/HandyOrg/HandyControl/blob/master/src/Shared/HandyControlDemo_Shared/UserControl/Controls/NotifyIconDemoCtl.xaml
[2]TerminalMACS WPF管理端:?https://github.com/dotnet9/TerminalMACS/blob/master/src/TerminalMACS.Manager/TerminalMACS.ManagerForWPF/TerminalMACS/Views/MainWindow.xaml
總結(jié)
以上是生活随笔為你收集整理的我想快速给WPF程序添加托盘菜单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将 Azure 上的 Ubuntu
- 下一篇: 【半译】在ASP.NET Core中创建