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

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.

Screenshot of a Dialog.

ShowDialogAsync

Metoda ShowDialogAsync ma kilka przeciążeń, które należy poznać:

Overloads

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.

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

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.

Screenshot of a Dialog button.

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 ShowDialogAsyncmetody , a następnie zwróci element , który reprezentuje akcję podjętą Microsoft.VisualStudio.RpcContracts.Notifications.DialogResultprzez 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.