在 WinUI 3 中要建立系統工具列上的小圖示(icon) 不太容易,可以說是有點小麻煩,不過一樣是還好有神通廣大的大神,已經將這些步驟做完,也做成套件讓我們使用了,現在要做出系統工具列上的小圖示(icon)只要會使用套件即可,非常簡單。
安裝 CommunityToolkit.Mvvm
執行後就會看到 Icon 出現在系統工具列中了(有可能會和其他的 Icon 收合在一起)
其中上面套上了 RelayCommand 這個 Attribute ,就是我們第二個套件(CommunityToolkit.Mvvm) 裡的內容,會自動幫我們建立 ShowBoxCommand 事件(method 名稱後面加上 Command),方便我們綁定按鈕事件。
綁定的方式如下:(滑鼠左鍵點擊一次觸發)
如果不想要在 XAML 中綁定,也可以使用 C# 來進行事件綁定
先到 App.xaml.cs 修改已有的程式碼,公開 Window 方便存取:
建立切換視窗顯示和隱藏的方法:
這裡就使用 C# 綁定滑鼠左鍵的點擊事件:
參考資料:
GitHub - HavenDV/H.NotifyIcon
GitHub - microsoft / microsoft-ui-xaml - How to minimize WinUI app on System Tray?
安裝套件
先使用 NuGet 安裝 H.NotifyIcon.WinUI 套件,或是使用 .NET CLI 執行以下指令安裝
dotnet add package H.NotifyIcon.WinUI
安裝 CommunityToolkit.Mvvm
dotnet add package CommunityToolkit.Mvvm
顯示 Icon
首先先找一張圖片,副檔名為 icon,可以使用網路上的工具將 png 轉換為 icon,放到 Assets 資料夾中,用作系通工具列上要顯示的小圖示。本文放置的圖片檔名為 Logo.ico
<Window
x:Class="WinUi3TaskbarIconTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:notifyIcon="using:H.NotifyIcon"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<notifyIcon:TaskbarIcon
x:Name="TaskbarIcon"
ToolTipText="提示文字 Ruyut"
IconSource="/Assets/Logo.ico" />
</StackPanel>
</Window>
執行後就會看到 Icon 出現在系統工具列中了(有可能會和其他的 Icon 收合在一起)
增加按鈕事件
在 MainWindow.xaml.cs 中增加一個 ShowBox 的 method ,用來測試 Icon 有被正常觸發
// using CommunityToolkit.Mvvm.Input;
[RelayCommand]
private void ShowBox()
{
var newWindow = new Window();
newWindow.Content = new TextBlock
{
Text = "已點擊",
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center
};
newWindow.AppWindow.Resize(new(400, 300));
newWindow.Activate();
}
其中上面套上了 RelayCommand 這個 Attribute ,就是我們第二個套件(CommunityToolkit.Mvvm) 裡的內容,會自動幫我們建立 ShowBoxCommand 事件(method 名稱後面加上 Command),方便我們綁定按鈕事件。
綁定的方式如下:(滑鼠左鍵點擊一次觸發)
<notifyIcon:TaskbarIcon
x:Name="TaskbarIcon"
ToolTipText="提示文字 Ruyut"
IconSource="/Assets/Logo.ico"
LeftClickCommand="{x:Bind ShowBoxCommand}" />
如果不想要在 XAML 中綁定,也可以使用 C# 來進行事件綁定
TaskbarIcon.LeftClickCommand = new RelayCommand(ShowBox);
顯示/隱藏視窗
通常使用系統工具列的 Icon 就是主畫面可能會隱藏,在背景執行,使用者可以點選 Icon 快速使用常用功能或是將視窗(主畫面)顯示,那該如何顯示和隱藏視窗呢?先到 App.xaml.cs 修改已有的程式碼,公開 Window 方便存取:
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
MainWindows = new MainWindow();
MainWindows.Activate();
}
public static Window MainWindows;
建立切換視窗顯示和隱藏的方法:
private void ShowOrHideWindow()
{
var window = App.MainWindows;
if (window == null) return;
if (window.Visible) window.Hide();
else window.Show();
}
這裡就使用 C# 綁定滑鼠左鍵的點擊事件:
public MainWindow()
{
this.InitializeComponent();
TaskbarIcon.LeftClickCommand = new RelayCommand(ShowOrHideWindow);
}
參考資料:
GitHub - HavenDV/H.NotifyIcon
GitHub - microsoft / microsoft-ui-xaml - How to minimize WinUI app on System Tray?
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com