コマンドの結果

へ: 拡張機能に最上位のコマンドを追加する

IInvokableCommand は、コマンド パレット内の 1 つの操作可能な項目を表します。これは、ユーザーがコマンドを選択したときにトリガーされます。

コマンドを選択すると、 Invoke メソッドが呼び出されます。 ここでは、拡張機能で実行する必要がある操作のロジックを実装します。 Invoke メソッドは、コマンドの実行後に応答する方法をコマンド パレットに指示する CommandResultを返す必要があります。たとえば、メッセージを表示するか、ファイルを開くか、何もしないかを指定します。

このページでは、返すことができる 7 種類の CommandResult と、それぞれについて説明します。

このページには、さまざまな CommandResult メソッドのコード例が記載されています。

KeepOpen コマンドの結果

KeepOpen コマンドの結果では何も実行されません。 パレットは、現在のページ スタックとクエリと共に、現在の状態のままになります。 これは、コマンド パレットでユーザーを維持し、現在のページを操作し続けるコマンドに役立ちます。

KeepOpen戻っても、コマンド パレットから新しいアプリまたはウィンドウを起動すると、次のウィンドウがフォーカスを受け取ると、パレットが自動的に非表示になります。

コマンドの結果を非表示にする

このコマンドの結果では、現在のページは開いたままですが、コマンド パレットは非表示になります。 これは、ユーザーをコマンド パレットから短時間取り出した後、このコンテキストに戻るコマンドに役立ちます。

GoBack コマンドの結果

この結果、ユーザーはコマンド パレットでページを取り戻し、ウィンドウを表示したままにします。 これはフォーム ページに最適です。このコマンドを実行すると、ユーザーは前のコンテキストに戻ります。

GoHome コマンドの結果

この結果、ユーザーはコマンド パレットのメイン ページに戻ります。 パレットを表示したままにします (それ以外の場合は、パレットがフォーカスを失う場合を除きます)。 最上位レベルのコマンドを変更したシナリオでは、これを使用することを検討してください。

コマンド結果を消去する

この結果は、アクションの実行後にコマンド パレットを非表示にし、ホーム ページに戻します。 次の起動時に、コマンド パレットはメイン ページから空のクエリで開始されます。 これは、1 回限りの操作であるコマンドや、コマンド パレットを開いたままにする必要がないコマンドに役立ちます。

他に何を使用すればよいかわからない場合は、これが既定である必要があります。 理想的には、ユーザーはパレットに入り、必要なものを見つけて、それを実行する必要があります。

ShowToast コマンドの結果

この結果は、一時的なデスクトップ レベルのメッセージをユーザーに表示します。 これは、パレットを閉じるときにアクションが行われたという確認を表示する場合に特に便利です。

ヘルパーで CopyTextCommand を考えてみましょう。このコマンドは、"クリップボードにコピー" というテキストを含むトーストを表示し、パレットを閉じます。

既定では、CommandResult.ShowToast(string) ヘルパーには CommandResult.Dismissが含まれます。 ただし、必要に応じて、結果を他の結果のいずれかに変更することもできます。 これにより、トーストを表示し、必要に応じてパレットを開いたままにしておくことができます。

コマンドの結果を確認する

この結果は、ユーザーに確認ダイアログを表示します。 ユーザーがダイアログを確認した場合、PrimaryCommandConfirmationArgsが実行されます。

これは、破壊的なアクションがあるコマンドや、ユーザーの意図を確認する必要があるコマンドに役立ちます。

以下は、 CommandResultの種類ごとに 1 つのコマンドを含むページです。

  1. /Pages/<ExtensionName>Page.csをオープンする
  2. GetItemsを次のGetItemsに置き換えます。

using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;

internal sealed partial class <ExtensionName>Page : ListPage
{
    public <ExtensionName>Page()
    {
        Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png");
        Title = "Example command results";
        Name = "Open";
    }

    public override IListItem[] GetItems()
    {
        ConfirmationArgs confirmArgs = new()
        {
            PrimaryCommand = new AnonymousCommand(
                () =>
                {
                    ToastStatusMessage t = new("The dialog was confirmed");
                    t.Show();
                })
            {
                Name = "Confirm",
                Result = CommandResult.KeepOpen(),
            },
            Title = "You can set a title for the dialog",
            Description = "Are you really sure you want to do the thing?",
        };

        return
        [
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.KeepOpen() }) { Title = "Keep the palette open" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Hide() }) { Title = "Hide the palette" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.GoBack() }) { Title = "Go back" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.GoHome() }) { Title = "Go home" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Dismiss() }) { Title = "Dismiss the palette" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.ShowToast("What's up") }) { Title = "Show a toast" },
            new ListItem(new AnonymousCommand(null) { Result = CommandResult.Confirm(confirmArgs) }) { Title = "Confirm something" },
        ];
    }
}
  1. 拡張機能をデプロイする
  2. コマンド パレットで操作します。Reload

CommandResult のいくつかのコマンドを含む拡張機能のスクリーンショット

次へ: マークダウン コンテンツを表示する