次の方法で共有


コマンドの結果

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

IInvokableCommand は、コマンド パレットで何かを行う基本的な単位です。 Invoke メソッドは、ユーザーがコマンドを選択し、拡張機能で何かを行うときに呼び出されます。 Invoke メソッドは ICommandResult を返します。このメソッドは、コマンドが呼び出された後の処理をコマンド パレットに指示します。 このページでは、コマンドの結果の種類ごとに可能な内容について詳しく説明します。

ツールキットには、コマンドの結果を作成するためのヘルパー メソッドが多数用意されています。 これらはすべて 、CommandResult クラスの静的メソッドです。 これらのメソッドを単独で呼び出しても、何も行われません。 コマンド パレットでオブジェクトを処理するには、 Invoke メソッドの結果としてこれらのオブジェクトを返す必要があります。

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

KeepOpen コマンドの結果

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

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

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

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

GoBack コマンドの結果

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

GoHome コマンドの結果

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

コマンド結果を消去する

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

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

ShowToast コマンドの結果

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

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

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

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

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

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

例として、コマンドの結果の種類ごとに 1 つのコマンドを含むページを次に示します。

前のセクションから作業している場合は、以下のコードを CommandResultsPage から <ExtensionName>Pageに変更します。


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

internal sealed partial class CommandResultsPage : ListPage
{
    public CommandResultsPage()
    {
        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" },
        ];
    }
}

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