Tworzenie okien dialogowych programu Visual Studio
Okna dialogowe to sposób monitowania użytkownika o podanie informacji lub umożliwienia dostosowania zachowania funkcji. Na przykład okno dialogowe Narzędzia/opcje zawiera poszczególne strony, które pozwalają użytkownikowi kontrolować zachowanie funkcji, takich jak motywy, edytory i karty dokumentów.
Rozpocznij
Aby rozpocząć, postępuj zgodnie z sekcją tworzenie projektu w sekcji Wprowadzenie.
Praca z oknami dialogowymi
Ten przewodnik jest przeznaczony do obsługi najważniejszych scenariuszy użytkownika podczas pracy z oknami dialogowymi:
- Tworzenie okna dialogowego
- Dostosowywanie tytułu okna dialogowego
- Dostosowywanie przycisków okna dialogowego
- Uzyskiwanie wyniku okna dialogowego
Tworzenie okna dialogowego
Tworzenie okna narzędzi przy użyciu nowego modelu rozszerzalności jest tak proste, jak wywoływanie metody ShowDialogAsync z pomocników ShellExtensibility i przekazywanie zawartości okna dialogowego.
ShowDialogAsync
Metoda ShowDialogAsync ma kilka przeciążeń, które należy poznać:
Overloads
ShowDialogAsync(content,cancellationToken)
ShowDialogAsync(content,title,cancellationToken)
ShowDialogAsync(content,options,cancellationToken)
ShowDialogAsync(content,title,options,cancellationToken)
Parametry
Nazwisko | Pisz | Opis |
---|---|---|
content | Microsoft.VisualStudio.RpcContracts.RemoteUI.IRemoteUserControl | Zawartość okna dialogowego. |
title | System.string | Tytuł okna dialogowego. |
options | Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption | Opcje wyświetlania okna dialogowego. |
cancellationToken | System.Threading.CancellationToken | Element CancellationToken umożliwiający anulowanie okna dialogowego. |
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);
}
Aby uzyskać więcej informacji na temat tworzenia kontrolki RemoteUserControl, zobacz Remote UI (Zdalny interfejs użytkownika).
Dostosowywanie tytułu okna dialogowego
Gdy rozszerzenie wyświetli okno dialogowe, można podać niestandardowy ciąg tytułu, który będzie wyświetlany w podpis regionie okna dialogowego.
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);
}
Dostosowywanie przycisków okna dialogowego
Po wyświetleniu okna dialogowego w środowisku IDE można wybrać niektóre kombinacje wstępnie zdefiniowanych przycisków dialogowych i akcji domyślnych. Wstępnie zdefiniowane kombinacje przycisków i akcji można znaleźć w pliku Microsoft.VisualStudio.RpcContracts.Notifications.DialogOption
.
Ponadto możesz utworzyć własną kombinację przycisków i akcji domyślnych z następujących elementów:
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 }
Przykłady
Dodawanie przycisku anulowania:
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);
}
Brak przycisków dialogowych:
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);
}
Uzyskiwanie wyniku okna dialogowego
Jeśli musisz wiedzieć, czy użytkownik afirmacyjnie zamknął okno dialogowe, czy go odrzucił, możesz oczekiwać na wywołanie ShowDialogAsync
metody , a następnie zwróci element , który reprezentuje akcję podjętą Microsoft.VisualStudio.RpcContracts.Notifications.DialogResult
przez użytkownika.
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
}
}
Następne kroki
Zobacz przykład DialogSample, aby zapoznać się z pełnym przykładem tworzenia rozszerzenia za pomocą okna dialogowego.