上一步:建立擴充功能。 我們將從該文章中建立的項目開始。
現在您已建立擴充功能,現在可以將命令新增至該擴充功能。
新增命令
我們可以從流覽至 /Pages/<ExtensionName>Page.cs 檔案開始。 此檔案是當用戶選取您的擴展名時所顯示的 ListPage 。 您應該會看到:
public <ExtensionName>Page()
{
Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
Title = "My sample extension";
Name = "Open";
}
public override IListItem[] GetItems()
{
return [
new ListItem(new NoOpCommand()) { Title = "TODO: Implement your extension here" }
];
}
您可以在這裡看到我們已設定頁面的圖示、標題,以及當您選取命令時界面最上層顯示的名稱。 方法 GetItems 會傳回您想要在此頁面上顯示的命令清單。 現在,它只會傳回一個不會執行任何動作的單一命令。 相反地,讓我們嘗試在用戶的預設網頁瀏覽器中開啟 此頁面 。
- 將
GetItems更新為下列內容:
public override IListItem[] GetItems()
{
var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/adding-commands");
return [
new ListItem(command)
{
Title = "Open the Command Palette documentation",
}
];
}
若要在命令選擇區中更新延伸模組,您需要:
- 部署擴充功能
- 在指令面板中,輸入「reload」指令以重新整理面板中的擴充功能。
備註
有數個重載選項,請務必選取 重載指令面板擴充功能
- 向下捲動至您的延伸模組,然後按
Enter - 在
Open the Command Palette documentation上按enter - 您應該會看到命令開啟命令面板文件。
OpenUrlCommand 是協助程式,用於在用戶的預設網頁瀏覽器中開啟 URL。
偵錯延伸模組
在您構建擴充功能時,您很可能會想要進行除錯。
- 將偵錯訊息新增至函
GetItems式。
public override IListItem[] GetItems()
{
var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/adding-commands");
+ Debug.Write("Debug message from GetItems");
return [
new ListItem(command)
{
Title = "Open the Command Palette documentation",
}
];
}
- 部署擴充功能
- 確認您處於偵錯組態
確認偵錯組態的指示
- 查看 Visual Studio 頂端的工具列
- 您會看到一個下拉式清單,其中顯示
Debug或Release,位於綠色「開始」按鈕 ▶️旁。 - 如果顯示
Release,請按下拉式清單,然後選取Debug。
- 按下綠色的 [開始] 按鈕 ▶️ 或按
F5以偵錯執行應用程式。 - 確定輸出視窗設定以顯示
Debug輸出(Ctrl + Alt + O)
- 在命令選擇區中,執行
reload - 移至您的延伸模組,然後選擇
Open the Command Palette documentation。 - 在 Visual Studio 的 [輸出] 視窗中,您應該會看到
Debug message from GetItems
InvokableCommand 命令
讓我們繼續建置新的命令,以顯示 MessageBox。 若要這樣做,我們需要建立實作 InvokableCommand的新類別。
- 在 Visual Studio 中,將新的類別檔案新增至您的
Pages目錄- 鍵盤快捷方式:按 Ctrl + Shift + A
- 或在方案總管中,移至 [專案 > 新增項目...
- 在 [新增專案] 對話框中:
- 從清單中選取 [類別]。
- 為您的類別檔案命名:
ShowMessageCommand.cs - 按兩下 [新增]。
- 將預設類別程式代碼取代為:
using System.Runtime.InteropServices;
namespace <ExtensionName>;
internal sealed partial class ShowMessageCommand : InvokableCommand
{
public override string Name => "Show message";
public override IconInfo Icon => new("\uE8A7");
public override CommandResult Invoke()
{
// 0x00001000 is MB_SYSTEMMODAL, which will display the message box on top of other windows.
_ = MessageBox(0, "I came from the Command Palette", "What's up?", 0x00001000);
return CommandResult.KeepOpen();
}
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type);
}
現在,我們可以將此命令新增至 檔案中的 <ExtensionName>Page.cs 命令清單:
- 在
<ExtensionName>.cs中,更新GetItems:
public override IListItem[] GetItems()
{
var command = new OpenUrlCommand("https://learn.microsoft.com/windows/powertoys/command-palette/creating-an-extension");
var showMessageCommand = new ShowMessageCommand();
return [
new ListItem(command)
{
Title = "Open the Command Palette documentation",
},
new ListItem(showMessageCommand),
];
}
- 部署擴充功能
- 在指令面板中,
Reload
就這樣,一條命令就能顯示消息框!
小提示
此時,您可能想要為專案初始化 git 存放庫 /{您選擇的其他原始檔控制方法}。 這可讓您更輕鬆地追蹤變更,並與其他人共用您的延伸模組。
建議您使用 GitHub,因為您可以輕鬆地與其他人共同作業延伸模組、取得意見反應,並與世界共用。
頁面類型
到目前為止,我們只使用「執行某些動作」的命令。 不過,您也可以新增命令,以在命令選擇區內顯示其他頁面。 調色盤中有兩種類型的「命令」:
-
InvokableCommand- 這些是執行某些動作的命令 -
IPage- 這些是顯示某些東西的命令
因為 IPage 實作屬於 ICommand 的一部分,因此您可以在所有可以使用命令的位置使用它們。 這表示您可以將它們新增至命令的最上層清單,或新增至頁面上的命令清單、專案上的作功能表等等。
您可以顯示兩種不同的頁面:
- ListPage - 這是顯示命令列表的頁面。 這是我們到目前為止一直在處理的工作。
-
ContentPage - 這是向使用者顯示豐富內容的頁面。 這可讓您指定抽象內容,並交由命令選擇區在原生體驗中呈現内容。 目前支援兩種不同類型的內容:
- Markdown 內容 - 這是以 Markdown 撰寫的內容,並在命令選擇區中轉譯。 如需詳細資訊,請參閱 MarkdownContent 。
- 表單內容 - 這是向使用者顯示表單的內容,然後將該表單的結果傳回延伸模組。 這些是由 調適型卡片 提供,這適用於取得使用者輸入,或顯示更複雜的資訊配置。 如需詳細資訊,請參閱 FormContent 。
新增更多命令
首先,新增顯示命令清單的新頁面。 建立實作 ListPage 的新類別。
- 在
Pages資料夾中,建立名為 的新類別MySecondPage - 將程式代碼更新為:
using Microsoft.CommandPalette.Extensions.Toolkit;
using System.Linq;
namespace <ExtensionName>;
internal sealed partial class MySecondPage : ListPage
{
public MySecondPage()
{
Icon = new("\uF147"); // Dial2
Title = "My second page";
Name = "Open";
}
public override IListItem[] GetItems()
{
// Return 100 CopyText commands
return Enumerable
.Range(0, 100)
.Select(i => new ListItem(new CopyTextCommand($"{i}"))
{
Title = $"Copy text {i}"
}).ToArray();
}
}
1.更新 <ExtensionName>Page.cs 以包含這個新頁面:
public override IListItem[] GetItems()
{
OpenUrlCommand command = new("https://learn.microsoft.com/windows/powertoys/command-palette/creating-an-extension");
return [
new ListItem(command)
{
Title = "Open the Command Palette documentation",
},
new ListItem(new ShowMessageCommand()),
+ new ListItem(new MySecondPage()) { Title = "My second page", Subtitle = "A second page of commands" },
];
}
- 部署擴充功能
- 在指令面板中,
Reload
您現在應該會在您的擴充功能中看到一個新頁面,上面顯示有 100 個將數字複製到剪貼簿的命令。