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
- Personalizzare il titolo della finestra di dialogo
- Personalizzare i pulsanti della finestra di dialogo
- Ottenere il risultato della finestra di dialogo
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.
ShowDialogAsync
Il metodo ShowDialogAsync include diversi overload da acquisire familiarità con:
Overload
ShowDialogAsync(content,cancellationToken)
ShowDialogAsync(content,title,cancellationToken)
ShowDialogAsync(content,options,cancellationToken)
ShowDialogAsync(content,title,options,cancellationToken)
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.
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
.
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 ShowDialogAsync
e restituirà un Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult
oggetto , 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 .