Creación de mensajes de usuario de Visual Studio

Las solicitudes de usuario son un mecanismo de interfaz de usuario sencillo para pedir al usuario que realice una selección. Al preguntar al usuario se crea un cuadro de diálogo con un mensaje, uno a tres botones para las opciones y un botón descartar.

Nota:

La interfaz de usuario exacta que se usa para preguntar a los usuarios puede cambiar en versiones futuras en función de los comentarios del usuario u otros factores.

Algunos ejemplos comunes son solicitar confirmación con un mensaje aceptar o cancelar, o pedir al usuario que elija entre un pequeño conjunto de opciones (no más de tres).

El usuario siempre tiene la opción de descartar el mensaje sin realizar una selección.

Las opciones presentadas al usuario se asignan a los valores devueltos del tipo definido en el TResult parámetro type.

Partes de un mensaje de usuario

Screenshot showing the parts of a user prompt.

  1. Mensaje
  2. Botones de elección
  3. Descartar botón

Introducción

Para empezar, siga la sección Crear el proyecto en la sección Introducción.

Trabajar con solicitudes de usuario

En esta guía se describen los siguientes escenarios para trabajar con solicitudes de usuario:

Mostrar un mensaje de usuario

La creación de una solicitud de usuario con el nuevo modelo de extensibilidad es tan simple como llamar al ShowPromptAsync método desde los asistentes de ShellExtensibility y pasar las opciones.

ShellExtensibility.ShowPromptAsync<TResult>()

El método ShowPromptAsync toma tres parámetros:

Parámetro Type Obligatorio Descripción
message string Texto del mensaje para el mensaje.
options PromptOptions<TResult> Define las opciones de usuario y las asigna para devolver valores.
cancellationToken CancellationToken para CancellationToken la operación asincrónica. Cuando se desencadena, el símbolo del sistema se cierra por fuerza.

Ejemplo

El código siguiente dentro de muestra Command un mensaje de usuario con un mensaje simple y un botón Aceptar.

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await this.Extensibility.Shell().ShowPromptAsync("This is a user prompt.", PromptOptions.OK, cancellationToken))
}

Uso de opciones integradas

Hay varios conjuntos predefinidos PromptOptions disponibles en el SDK.

OK (CORRECTO)

Opción Valor predeterminado Valor devuelto
"Ok" true
Descartado false

OKCancel

Opción Valor predeterminado Valor devuelto
"Ok" true
"Cancelar" No false
Descartado false

RetryCancel

Opción Valor predeterminado Valor devuelto
"Reintentar" true
"Cancelar" No false
Descartado false

Ejemplo

Screenshot showing a user prompt with OK.

Cree un símbolo del sistema con una única opción "Aceptar".

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
    // Asking the user to confirm an operation.
    if (!await this.Extensibility.Shell().ShowPromptAsync("Continue with executing the command?", PromptOptions.OKCancel, ct))
    {
      return;
    }
    
    ...
}

Si el usuario hace clic en "Aceptar", ShowPromptAsync devuelve true cuando se espera. Si el usuario hace clic en el botón descartar, devuelve false.

Cambie la opción predeterminada de una opción integrada a "Cancelar".

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
  // Asking the user to confirm an operation.
  if (!await this.Extensibility.Shell().ShowPromptAsync("Continue with executing the command?", PromptOptions.OKCancel.WithCancelAsDefault(), ct))
  {
    return;
  }
  
  ...
}

Creación de un símbolo del sistema con opciones personalizadas

Screenshot showing a custom user prompt.

Además de las opciones integradas, puede personalizar las opciones presentadas al usuario y el valor devuelto asignado a cada uno.

En lugar de usar los conjuntos definidos en PromptOptions, cree una nueva instancia de PromptOptions<TResult> y pásela a ShowPromptAsync.

Ejemplo

Empiece por crear un tipo de valor para definir los valores devueltos:

public enum TokenThemeResult
{
  None,
  Solarized,
  OneDark,
  GruvBox,
}

A continuación, cree la PromptOptions<TResult> instancia y pásela junto ShowPromptAsync con los argumentos y cancellationToken necesariosmessage:

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken ct)
{
  // Custom prompt
  var themeResult = await this.Extensibility.Shell().ShowPromptAsync(
    "Which theme should be used for the generated output?",
    new PromptOptions<TokenThemeResult>
    {
      Choices =
      {
        { "Solarized Is Awesome", TokenThemeResult.Solarized },
        { "OneDark Is The Best", TokenThemeResult.OneDark },
        { "GruvBox Is Groovy", TokenThemeResult.GruvBox },
      },
      DismissedReturns = TokenThemeResult.None,
      DefaultChoiceIndex = 2,
    },
    ct);

  Debug.WriteLine($"Selected Token Theme: {themeResult}");
}

La Choices colección asigna las opciones de usuario a los valores de la TokenThemeResult enumeración. DismissedReturns establece el valor que se devuelve si el usuario hace clic en el botón descartar. DefaultChoiceIndex es un índice de base cero en la Choices colección que define la opción predeterminada.

Pasos siguientes

En los ejemplos siguientes se muestra cómo trabajar con solicitudes de usuario: