Finestra di dialogo Crea Visual Studio

I dialoghi sono un modo per richiedere informazioni a un utente o consentire personalizzazioni del comportamento delle funzionalità. Ad esempio, la finestra di dialogo Strumenti/Opzioni include singole pagine che consentono all'utente di controllare il comportamento per funzionalità come temi, editor e schede documento.

Attività iniziali

Per iniziare, seguire la sezione Creare il progetto nella sezione Introduzione.

Usare i dialoghi

Questa guida è progettata per coprire gli scenari utente principali quando si riguardano i dialoghi:

Creare una finestra di dialogo

La creazione di una finestra degli strumenti con il nuovo modello di estendibilità è semplice come chiamare il metodo ShowDialogAsync dagli helper shellExtensibility e passare il contenuto della finestra di dialogo.

Screenshot of a Dialog.

ShowDialogAsync

Il metodo ShowDialogAsync include diversi overload da acquisire familiarità con:

Overload

Parametri

Nome Tipo Descrizione
content Microsoft.VisualStudio.RpcContracts.RemoteUI.IRemoteUserControl Contenuto del dialogo.
title System.String Titolo del dialogo.
Opzioni Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption Opzioni per la visualizzazione della finestra di dialogo.
cancellationToken System.Threading.CancellationToken CancellationToken per annullare la finestra di dialogo.
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);
}

Per altre informazioni sulla creazione di un controllo RemoteUserControl, vedere Remote UI .For more information on creating a RemoteUserControl, see Remote UI.

Personalizzare il titolo della finestra di dialogo

Quando l'estensione visualizza una finestra di dialogo, è possibile specificare una stringa di titolo personalizzata che verrà visualizzata nella didascalia area della finestra di dialogo.

Screenshot showing a Dialog title.

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);
}

Personalizzare i pulsanti della finestra di dialogo

Quando viene visualizzata una finestra di dialogo nell'IDE, è possibile selezionare determinate combinazioni di pulsanti di dialogo predefiniti e azioni predefinite. Le combinazioni predefinite di pulsanti e azioni sono disponibili in Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption.

Screenshot of a Dialog button.

Inoltre, è possibile creare una combinazione personalizzata di pulsanti e azioni predefinite da:

  • 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
    }
    

Esempi

Aggiunta di un pulsante annulla:

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);
}

Nessun pulsante di dialogo:

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);
}

Ottenere il risultato della finestra di dialogo

Se è necessario sapere se un utente ha chiuso in modo affermativo una finestra di dialogo o se l'ha chiusa, è possibile attendere la chiamata a ShowDialogAsynce restituirà un Microsoft.VisualStudio.RpcContracts.Notifications.DialogResultoggetto , che rappresenta l'azione eseguita dall'utente.

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
	}
}

Passaggi successivi

Per un esempio completo della creazione di un'estensione con una finestra di dialogo, vedere l'esempio DialogSample .