Sdílet prostřednictvím


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

  1. 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.

  2. 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

  3. V souboru OpenDialog.cs přidejte následující using příkaz:

    using Microsoft.VisualStudio.PlatformUI;
    
  4. Deklarujte třídu, TestDialogWindow která je odvozena od DialogWindow:

    class TestDialogWindow : DialogWindow
    {. . .}
    
  5. 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;
    }
    
  6. OpenDialog.ShowMessageBox V metodě nahraďte existující kód následujícím kódem:

    TestDialogWindow testDialog = new TestDialogWindow();
    testDialog.ShowModal();
    
  7. 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

  1. 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í.

  2. Přidejte následující using deklarace:

    using System.Windows;
    using Microsoft.Internal.VisualStudio.PlatformUI;
    
  3. Vytvořte třídu s názvem TestDialogWindow2 , která je odvozena z Window:

    class TestDialogWindow2 : Window
    {. . .}
    
  4. Přidání soukromého odkazu na IVsUIShell:

    private IVsUIShell shell;
    
  5. Přidejte konstruktor, který nastaví odkaz na IVsUIShell:

    public TestDialogWindow2(IVsUIShell uiShell)
    {
        shell = uiShell;
    }
    
  6. 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);
    }
    
  7. 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.