Vytváření a správa modálních dialogových oken
Když v sadě Visual Studio vytvoříte modální dialogové okno, musíte se ujistit, že nadřazené okno dialogového okna je při zobrazení dialogového okna zakázané, a po zavření dialogového okna znovu povolte nadřazené okno. Pokud to neuděláte, může se zobrazit chyba: Microsoft Visual Studio nemůže vypnout, protože modální dialogové okno je aktivní. Zavřete aktivní dialogové okno a zkuste to znovu.
Existují dva způsoby, jak to udělat. Doporučeným způsobem, pokud máte dialogové okno WPF, je odvodit jej z DialogWindowa pak volání ShowModal zobrazit dialogové okno. Pokud to uděláte, nemusíte spravovat modální stav nadřazeného okna.
Pokud vaše dialogové okno není WPF nebo z nějakého jiného důvodu nelze odvodit třídu dialogového okna z DialogWindow, pak musíte získat nadřazený dialog voláním GetDialogOwnerHwnd a správou modální stav sami, voláním EnableModeless metody s parametrem 0 (false) před zobrazením dialogového okna a voláním metody znovu s parametrem 1 (true) po zavření dialogového okna.
Vytvoření dialogového okna odvozeného z Dialogového okna
Vytvořte projekt VSIX s názvem OpenDialogTest a přidejte příkaz nabídky s názvem OpenDialog. Další informace o tom, jak to provést, naleznete v tématu Vytvoření rozšíření pomocí příkazu nabídky.
Chcete-li použít DialogWindow třídu, musíte přidat odkazy na následující sestavení (na kartě Framework v dialogovém okně Přidat odkaz ):
Presentationcore
Presentationframework
Windowsbase
System.xaml
V souboru OpenDialog.cs přidejte následující
using
příkaz:using Microsoft.VisualStudio.PlatformUI;
Deklarujte třídu,
TestDialogWindow
která je odvozena od DialogWindow:class TestDialogWindow : DialogWindow {. . .}
Pokud chcete mít možnost minimalizovat a maximalizovat dialogové okno, nastavte HasMaximizeButton a HasMinimizeButton nastavte hodnotu true:
internal TestDialogWindow() { this.HasMaximizeButton = true; this.HasMinimizeButton = true; }
OpenDialog.ShowMessageBox
V metodě nahraďte existující kód následujícím kódem:TestDialogWindow testDialog = new TestDialogWindow(); testDialog.ShowModal();
Sestavte a spusťte aplikaci. Měla by se zobrazit experimentální instance sady Visual Studio. V nabídce Nástroje experimentální instance byste měli vidět příkaz s názvem Invoke OpenDialog. Po kliknutí na tento příkaz by se mělo zobrazit dialogové okno. Měli byste být schopni minimalizovat a maximalizovat okno.
Vytvoření a správa dialogového okna, které není odvozeno z DialogWindow
Pro účely tohoto postupu můžete použít řešení OpenDialogTest , které jste vytvořili v předchozím postupu, se stejnými odkazy na sestavení.
Přidejte následující
using
deklarace:using System.Windows; using Microsoft.Internal.VisualStudio.PlatformUI;
Vytvořte třídu s názvem
TestDialogWindow2
, která je odvozena z Window:class TestDialogWindow2 : Window {. . .}
Přidání soukromého odkazu na IVsUIShell:
private IVsUIShell shell;
Přidejte konstruktor, který nastaví odkaz na IVsUIShell:
public TestDialogWindow2(IVsUIShell uiShell) { shell = uiShell; }
OpenDialog.ShowMessageBox
V metodě nahraďte existující kód následujícím kódem:IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell)); TestDialogWindow2 testDialog2 = new TestDialogWindow2(uiShell); //get the owner of this dialog IntPtr hwnd; uiShell.GetDialogOwnerHwnd(out hwnd); testDialog2.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; uiShell.EnableModeless(0); try { WindowHelper.ShowModal(testDialog2, hwnd); } finally { // This will take place after the window is closed. uiShell.EnableModeless(1); }
Sestavte a spusťte aplikaci. V nabídce Nástroje by se měl zobrazit příkaz s názvem Invoke OpenDialog. Po kliknutí na tento příkaz by se mělo zobrazit dialogové okno.