Compartilhar via


Resultados do comando

Anterior: adicionar comandos de nível superior à sua extensão

Um IInvokableCommand é uma unidade fundamental para fazer algo na Paleta de Comandos. O método Invoke é chamado quando o usuário seleciona o comando e é onde você faz algo em sua extensão. O método Invoke retorna um ICommandResult, que informa à Paleta de Comandos o que fazer após a invocação do comando. Esta página detalha o que é possível com cada tipo de resultado de comando.

O kit de ferramentas fornece vários métodos auxiliares para criar resultados de comando. Todos esses são métodos estáticos na classe CommandResult . Chamar esses métodos por conta própria não fará nada. Você deve retornar esses objetos como resultado de um método Invoke , para que a Paleta de Comandos os manipule.

Observação

Há exemplos de código para os vários métodos CommandResult listados nesta página.

Resultado do comando KeepOpen

O resultado do comando KeepOpen não faz nada. Ele deixa a paleta no seu estado atual, com a pilha de páginas e as consultas atuais. Isso pode ser útil para comandos que desejam manter o usuário na Paleta de Comandos, para continuar trabalhando com a página atual.

Observação

Mesmo quando retornar KeepOpen, iniciar um novo aplicativo ou janela a partir da Paleta de Comandos ocultará automaticamente a paleta quando o foco for recebido pela próxima janela.

Ocultar o resultado do comando

Esse resultado de comando mantém a página atual aberta, mas oculta a Paleta de Comandos. Isso pode ser útil para comandos que desejam tirar o usuário brevemente da Paleta de Comandos, mas depois voltar para esse contexto.

Resultado do comando GoBack

Esse resultado leva o usuário de volta a uma página na Paleta de Comandos e mantém a janela visível. Isso é perfeito para páginas de formulário, em que fazer o comando deve levá-lo de volta ao contexto anterior.

Resultado do comando GoHome

Esse resultado leva o usuário de volta à página principal da Paleta de Comandos. Ele deixará a Paleta visível (a menos que a paleta perca o foco). Considere usar isso para cenários em que você alterou seus comandos de nível superior.

Ignorar o resultado do comando

Esse resultado oculta a Paleta de Comandos depois que a ação é executada e a leva de volta para a home page. Na próxima inicialização, a Paleta de Comandos começará na página principal com uma consulta em branco. Isso é útil para comandos que são ações pontuais ou que não precisam manter a Paleta de Comandos aberta.

Se você não sabe mais o que usar, esse deve ser o seu padrão. O ideal é que os usuários entrem na paleta, encontrem o que precisam e terminem o que precisam fazer com ela.

Resultado do comando ShowToast

Esse resultado exibe uma mensagem transitória no nível da área de trabalho para o usuário. Isso é especialmente útil para exibir a confirmação de que uma ação ocorreu quando a paleta será fechada.

Considere o CopyTextCommand nos auxiliares - esse comando mostrará um aviso com o texto "Copiado para área de transferência" e, em seguida, descartará a paleta.

Por padrão, a função auxiliar CommandResult.ShowToast(string) terá um Resultado de CommandResult.Dismiss. No entanto, você pode alterar o resultado para qualquer um dos outros resultados, se desejar. Isso permite que você exiba um brinde e mantenha a paleta aberta, se desejar.

Confirmar o resultado do comando

Esse resultado exibe uma caixa de diálogo de confirmação para o usuário. Se o usuário confirmar a caixa de diálogo, o PrimaryCommand dos ConfirmationArgs será executado.

Isso é útil para comandos que podem ter ações destrutivas ou que precisam confirmar a intenção do usuário.

Exemplo

Por exemplo, aqui está uma página com um comando para cada tipo de resultado de comando:

Observação

Se estiver trabalhando na seção anterior, modifique o código abaixo de CommandResultsPage para <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" },
        ];
    }
}

Avançar: Exibir conteúdo de markdown