Compartir a través de


Crear cuadros de diálogo de Visual Studio

Los diálogos son una manera de solicitar a un usuario información o permitir personalizaciones del comportamiento de las características. Por ejemplo, el cuadro de diálogoOpciones de > tiene páginas individuales que permiten al usuario controlar el comportamiento de características como temas, editores y pestañas de documento.

Comienza

Para empezar, siga los pasos descritos en Creación de la primera extensión de Visual Studio.

Trabajar con diálogos

En este artículo se describen los principales escenarios de usuario al trabajar con diálogos:

Crear un cuadro de diálogo

Crear una ventana de herramientas con el nuevo modelo de extensibilidad es tan sencillo como llamar al método ShowDialogAsync desde los asistentes de ShellExtensibility y pasar el contenido del cuadro de diálogo.

Captura de pantalla que muestra un cuadro de diálogo.

ShowDialogAsync

El método ShowDialogAsync tiene varias sobrecargas con las que debe familiarizarse:

Sobrecargas

Parámetros

Nombre Tipo Descripción
content Microsoft.VisualStudio.RpcContracts.RemoteUI.IRemoteUserControl Contenido del cuadro de diálogo.
title System.String Título del cuadro de diálogo.
options Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption Opciones para mostrar el cuadro de diálogo.
cancellationToken System.Threading.CancellationToken para cancelar el cuadro de diálogo.
public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    // Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
    #pragma warning disable CA2000 // Dispose objects before losing scope
    var control = new MyDialogControl(null);
    #pragma warning restore CA2000 // Dispose objects before losing scope

    await this.Extensibility.Shell().ShowDialogAsync(control, cancellationToken);
}

Para obtener más información sobre cómo crear un control de usuario remoto, consulte Interfaz de usuario remota.

Personalizar el título del cuadro de diálogo

Cuando la extensión muestra un cuadro de diálogo, puede proporcionar una cadena de título personalizada que se muestra en la región de título del diálogo.

Captura de pantalla que muestra un título de diálogo.

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    // Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
    #pragma warning disable CA2000 // Dispose objects before losing scope
    var control = new MyDialogControl(null);
    #pragma warning restore CA2000 // Dispose objects before losing scope

    await this.Extensibility.Shell().ShowDialogAsync(control, "My Dialog Title", cancellationToken);
}

Personalizar los botones de diálogo

Cuando se muestra un cuadro de diálogo en el entorno de desarrollo integrado, puede seleccionar determinadas combinaciones de botones de diálogo predefinidos y acciones predeterminadas. Puede encontrar las combinaciones predefinidas de botón y acción en Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption.

Captura de pantalla de un botón de diálogo.

También puede crear su propia combinación de botones y acciones predeterminadas desde:

  • Microsoft.VisualStudio.RpcContracts.Notifications.DialogButton

    public enum DialogButton
    {
        // Hides all of the dialog buttons.
        None,
        // Shows a single close button.
        Close,
        // Shows a single OK button.
        OK,
        // Shows an OK and Cancel button.
        OKCancel
    }
    
  • Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult

    public enum DialogResult
    {
        // The dialog was closed via the System.Threading.CancellationToken or by using an
        // action provided by the Microsoft.Visual Studio.RpcContracts.RemoteUI.IRemoteUserControl
        // content.
        None,
        // The user pressed the Close button.
        Close,
        // The user pressed the OK button.
        OK,
        // The user pressed the Cancel button, or pressed the nonclient close button, or
        // pressed the Esc key.
        Cancel
    }
    

Ejemplos

Agregar un botón Cancelar:

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    // Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
    #pragma warning disable CA2000 // Dispose objects before losing scope
    var control = new MyDialogControl(null);
    #pragma warning restore CA2000 // Dispose objects before losing scope

    await this.Extensibility.Shell().ShowDialogAsync(control, DialogOption.OKCancel, cancellationToken);
}

Sin botones de diálogo:

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    // Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
    #pragma warning disable CA2000 // Dispose objects before losing scope
    var control = new MyDialogControl(null);
    #pragma warning restore CA2000 // Dispose objects before losing scope

    await this.Extensibility.Shell().ShowDialogAsync(control, new DialogOption(DialogButton.None, DialogResult.None), cancellationToken);
}

Obtención del resultado del cuadro de diálogo

Si necesita saber si un usuario cerró positivamente un cuadro de diálogo o lo descartó, puede esperar a la llamada a ShowDialogAsync. Devuelve Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult, que representa la acción realizada por el usuario.

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    // Ownership of the RemoteUserControl is transferred to Visual Studio, so it shouldn't be disposed by the extension
    #pragma warning disable CA2000 // Dispose objects before losing scope
    var control = new MyDialogControl(null);
    #pragma warning restore CA2000 // Dispose objects before losing scope

    DialogResult result = await this.Extensibility.Shell().ShowDialogAsync(control, "My Dialog Title", DialogOption.OKCancel, cancellationToken);

    if (result == DialogResult.OK)
    {
        // The user pressed the OK button.
    }
}
  • Consulte DialogSample para obtener un ejemplo completo de cómo crear una extensión con un cuadro de diálogo.