Resultados del comando

Anterior: Agregar comandos de nivel superior a la extensión

IInvokableCommand representa un único elemento accionable en la paleta de comandos, es lo que se desencadena cuando un usuario selecciona un comando.

Cuando se selecciona el comando, se llama al método Invoke . Aquí es donde se implementa la lógica para lo que debe hacer la extensión. El método Invoke debe devolver un CommandResult, que indica a la paleta de comandos cómo responder después de que se ejecute el comando; por ejemplo, si se debe mostrar un mensaje, abrir un archivo o no hacer nada.

En esta página se explican los 7 tipos diferentes de CommandResult que puede devolver y lo que hace cada uno:

Nota:

Hay ejemplos de código para los distintos métodos CommandResult enumerados en esta página.

Resultado del comando KeepOpen

El resultado del KeepOpen comando no tiene efecto. Deja la paleta en su estado actual, con la pila de páginas y la consulta actuales. Esto puede ser útil para los comandos que desean mantener al usuario en la paleta de comandos, para seguir trabajando con la página actual.

Nota:

Incluso al devolver KeepOpen, al iniciar una nueva aplicación o ventana desde la paleta de comandos, la paleta se ocultará automáticamente cuando la siguiente ventana reciba el foco.

Ocultar resultado del comando

Este resultado del comando mantiene abierta la página actual, pero oculta la paleta de comandos. Esto puede ser útil para los comandos que quieren sacar al usuario brevemente de la paleta de comandos, pero luego volver a este contexto.

Resultado del comando GoBack

Este resultado devuelve al usuario una página de la paleta de comandos y mantiene la ventana visible. Esto es perfecto para las páginas de formulario, donde ejecutar el comando debe llevar al usuario al contexto anterior.

Resultado del comando GoHome

Este resultado devuelve al usuario a la página principal de la paleta de comandos. Dejará visible la paleta (a menos que la paleta pierda el foco). Considere la posibilidad de usar esto para escenarios en los que ha cambiado los comandos de nivel superior.

Resultado del comando Dismiss

Este resultado oculta la paleta de comandos después de ejecutar la acción y la vuelve a la página principal. En el siguiente inicio, la paleta de comandos se iniciará desde la página principal con una consulta en blanco. Esto es útil para los comandos que son acciones puntuales o que no necesitan mantener abierta la paleta de comandos.

Si no sabe qué más usar, debe ser el valor predeterminado. Idealmente, los usuarios deben entrar en la paleta, encontrar lo que necesitan y hacerse con ella.

Resultado del comando ShowToast

Este resultado muestra un mensaje transitorio de nivel de escritorio al usuario. Esto resulta especialmente útil para mostrar la confirmación de que se ha realizado una acción cuando se cierre la paleta.

Considere usar CopyTextCommand en los asistentes: este comando mostrará una notificación emergente con el texto "Copiado en el Portapapeles" y, a continuación, descartará la paleta.

De forma predeterminada, el asistente CommandResult.ShowToast(string) tendrá un resultado de CommandResult.Dismiss. Sin embargo, puede cambiar el resultado a cualquiera de los otros resultados si lo desea. Esto le permite mostrar un mensaje emergente y mantener abierta la paleta, si lo desea.

Si necesita más de un mensaje de texto, use CommandResult.ShowToast(ToastArgs). ToastArgs puede incluir un icono y un comando de acción. El comando de acción aparece como un botón en la notificación emergente, lo cual resulta útil para acciones de seguimiento como Deshacer. La paleta de comandos muestra estos mensajes mediante la configuración de posición del indicador en pantalla del usuario en la configuración de la paleta de comandos.

Confirmar el resultado del comando

Este resultado muestra un cuadro de diálogo de confirmación al usuario. Si el usuario confirma el cuadro de diálogo, se llevará a cabo la acción PrimaryCommand de las ConfirmationArgs.

Esto es útil para los comandos que podrían tener acciones destructivas o que necesitan confirmar la intención del usuario.

Ejemplo

A continuación se muestra una página con un comando para cada tipo de CommandResult:

  1. Abrir /Pages/<ExtensionName>Page.cs
  2. Reemplace GetItems con el GetItems siguiente:

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. Implementación de la extensión
  2. En la paleta de comandos, Reload

Captura de pantalla de la extensión con varios comandos para CommandResult

Siguiente: Mostrar contenido de Markdown