Creación de 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álogo Herramientas/Opciones tiene páginas individuales que permiten al usuario controlar el comportamiento de características como temas, editores y pestañas de documento.
Introducción
Para empezar, siga la sección Crear el proyecto en la sección Introducción.
Trabajo con diálogos
Esta guía está diseñada para cubrir los principales escenarios de usuario al trabajar con diálogos:
- Crear un cuadro de diálogo
- Personalizar el título del cuadro de diálogo
- Personalizar los botones de diálogo
- Obtención del resultado del cuadro de diálogo
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.
ShowDialogAsync
El método ShowDialogAsync tiene varias sobrecargas con las que debe familiarizarse:
Sobrecargas
ShowDialogAsync(content,cancellationToken)
ShowDialogAsync(content,title,cancellationToken)
ShowDialogAsync(content,options,cancellationToken)
ShowDialogAsync(content,title,options,cancellationToken)
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 | 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 RemoteUserControl, consulte Interfaz de usuario remota.
Personalizar el título del cuadro de diálogo
Cuando la extensión muestre un cuadro de diálogo, puede proporcionar una cadena de título personalizada que se mostrará en la región de subtítulo del 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, "My Dialog Title", cancellationToken);
}
Personalizar los botones de diálogo
Cuando se muestra un diálogo en el IDE, se pueden seleccionar determinadas combinaciones de botones de diálogo predefinidos y acciones predeterminadas. Las combinaciones predefinidas de botón y acción se pueden encontrar en Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption
.
Además, 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 using an // action provided by the Microsoft.Visual Studio.RpcContracts.RemoteUI.IRemoteUserControl // content. None, // The user clicked the Close button. Close, // The user clicked the OK button. OK, // The user clicked the Cancel button, or clicked 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 la llamada a ShowDialogAsync
y devolverá un 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)
{
// User clicked the OK button
}
}
Pasos siguientes
Consulte el ejemplo DialogSample para obtener un ejemplo completo de creación de una extensión con un cuadro de diálogo.