Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zurück: Erstellen einer Erweiterung. Wir beginnen mit dem in diesem Artikel erstellten Projekt.
Nachdem Sie Ihre Erweiterung erstellt haben, ist es an der Zeit, ihr einige Befehle hinzuzufügen.
Hinzufügen einiger Befehle
Wir können beginnen, indem wir zur <ExtensionName>Page.cs Datei navigieren. Diese Datei ist die ListPage , die angezeigt wird, wenn der Benutzer Ihre Erweiterung auswählt. Dort sollte Folgendes angezeigt werden:
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" }
];
}
Hier sehen Sie, dass wir das Symbol für die Seite, den Titel und den Namen festgelegt haben, der auf der obersten Ebene angezeigt wird, wenn Sie den Befehl ausgewählt haben. Die GetItems-Methode gibt die Liste der Befehle zurück, die auf dieser Seite angezeigt werden sollen. Im Moment gibt das nur einen einzigen Befehl zurück, der nichts tut. Versuchen wir stattdessen, diesen Befehl so zu gestalten, dass er die Seite dies im Standardwebbrowser des Benutzers öffnet.
Wir können die Implementierung von GetItems wie folgt ändern:
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",
}
];
}
Stellen Sie Ihre App erneut bereit, führen Sie den Befehl "neu laden" aus, um die Erweiterungen in der Palette zu aktualisieren, und navigieren Sie zu Ihrer Erweiterung. Sie sollten sehen, dass der Befehl jetzt die Befehlspalettendokumentation öffnet.
Der OpenUrlCommand ist ein Hilfsprogramm zum Öffnen einer URL im Standardwebbrowser des Benutzers. Sie können eine Erweiterung beliebig implementieren. Stattdessen erstellen wir einen neuen Befehl, der ein MessageBox-Objekt anzeigt. Dazu müssen wir eine neue Klasse erstellen, die IInvokableCommand implementiert.
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);
}
Jetzt können wir diesen Befehl zur Liste der Befehle in der <ExtensionName>Page.cs Datei hinzufügen:
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),
];
}
Bereitstellen, neu laden und schwupps – ein Befehl zum Anzeigen einer Nachrichtenbox!
Tipp
Zu diesem Zeitpunkt möchten Sie wahrscheinlich ein Git-Repository / {andere Quellcodeverwaltungsmethode Ihrer Wahl} für Ihr Projekt initialisieren. Dadurch wird es einfacher, Änderungen nachzuverfolgen und Ihre Erweiterung für andere Personen freizugeben.
Wir empfehlen die Verwendung von GitHub, da es einfach ist, mit anderen an Ihrer Erweiterung zusammenzuarbeiten und Feedback zu erhalten und mit der Welt zu teilen.
Hinzufügen weiterer Seiten
Bisher haben wir nur mit Befehlen gearbeitet, die "etwas tun". Sie können jedoch auch Befehle hinzufügen, die zusätzliche Seiten in der Befehlspalette anzeigen. Es gibt im Grunde zwei Arten von "Befehlen" in der Palette:
- IInvokableCommand – Dies sind Befehle, die etwas tun.
- IPage – Dies sind Befehle, die etwas anzeigen.
Da IPage-ImplementierungenICommands sind, können Sie sie überall verwenden, wo Sie Befehle verwenden können. Dies bedeutet, dass Sie sie der Liste der Befehle auf oberster Ebene oder einer Liste von Befehlen auf einer Seite, dem Kontextmenü eines Elements usw. hinzufügen können.
Es gibt zwei verschiedene Arten von Seiten, die Sie anzeigen können:
- ListPage – Dies ist eine Seite, auf der eine Liste von Befehlen angezeigt wird. Dies ist das, was wir bisher bearbeitet haben.
-
ContentPage – Dies ist eine Seite, auf der dem Benutzer umfangreiche Inhalte angezeigt werden. Auf diese Weise können Sie abstrakte Inhalte angeben und der Befehlspalette das Rendern des Inhalts in einer nativen Benutzererfahrung überlassen. Bisher werden zwei verschiedene Arten von Inhalten unterstützt:
- Markdown-Inhalt – Dies ist Inhalt, der in Markdown geschrieben wurde und in der Befehlspalette gerendert wird. Details finden Sie unter MarkdownContent .
- Formularinhalt – Dies ist Inhalt, der dem Benutzer ein Formular anzeigt, und gibt dann die Ergebnisse dieses Formulars an die Erweiterung zurück. Diese werden von adaptiven Karten unterstützt. Dies ist nützlich, um Benutzereingaben zu erhalten oder komplexere Layouts von Informationen anzuzeigen. Details finden Sie unter FormContent .
Fügen Sie zunächst eine neue Seite hinzu, auf der eine Liste von Befehlen angezeigt wird. Erstellen Sie eine neue Klasse, die ListPage implementiert:
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();
}
}
Aktualisieren Sie als Nächstes das <ExtensionName>Page.cs, um diese neue Seite einzuschließen.
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" },
];
}
Setzen Sie die Erweiterung ein, laden Sie sie neu, und Sie sollten nun eine neue Seite mit 100 Befehlen sehen, die eine Zahl in die Zwischenablage kopieren.
Als Nächstes: Aktualisieren einer Liste von Befehlen
Verwandte Inhalte
Windows developer