我想快速給wpf程式添加托盤菜單

我想快速給wpf程式添加托盤菜單

常用的托盤效果應該都能滿足了吧?而實現這些效果,我們自己要碼的代碼真的不多

最后更新 2020/4/25 下午1:45
沙漠尽头的狼
预计阅读 2 分钟
分类
WPF
标签
.NET WPF 托盤菜單

1 簡單要求

  • 使用開源控制項庫
  • 在 xaml 中聲明托盤菜單,就像給控制項添加 contextmenu 一樣
  • 封裝了常用命令,比如:打開主窗體、退出應用程式等

我在 terminalmacs 中添加了托盤菜單,最終實現的托盤菜單效果:

2 如何做?

【step 1】在已創建的 wpf 項目中,添加 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

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/1/26

wpf 藉助自定義 xml 文件實現國際化

本文詳細居間了在wpf程式中使用自定義xml文件實現國際化的方法,包括安裝必備nuget包、動態獲取語言列表、動態切換語言、在代碼和xaml界面中使用翻譯字符串等內容,同時提供了源碼連結,幫助開發者輕鬆實現wpf應用的國際化。

继续阅读