我想快速給WPF程序添加托盤菜單


我想快速給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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM