Kalıcı iletişim kutuları oluşturma ve yönetme

Visual Studio'da kalıcı bir iletişim kutusu oluşturduğunuzda, iletişim kutusu görüntülenirken iletişim kutusunun üst penceresinin devre dışı bırakıldığından emin olmanız ve ardından iletişim kutusu kapatıldıktan sonra üst pencereyi yeniden etkinleştirmeniz gerekir. Bunu yapmazsanız şu hatayı alabilirsiniz: Kalıcı bir iletişim kutusu etkin olduğundan Microsoft Visual Studio kapatılamıyor. Etkin iletişim kutusunu kapatın ve yeniden deneyin.

Bunu yapmanın iki yolu vardır. Bir WPF iletişim kutunuz varsa, önerilen yol bunu 'dan DialogWindowtüretmek ve ardından iletişim kutusunu görüntülemek için çağrısı ShowModal yapmaktır. Bunu yaparsanız, üst pencerenin kalıcı durumunu yönetmeniz gerekmez.

İletişim kutunuz WPF değilse veya başka bir nedenle iletişim kutusu sınıfınızı öğesinden DialogWindowtüretemiyorsanız, iletişim kutusunu görüntülemeden önce yöntemi 0 (false) parametresiyle çağırıp GetDialogOwnerHwnd EnableModeless iletişim kutusunu kapattıktan sonra 1 (true) parametresiyle yeniden çağırarak iletişim kutusunun üst öğesini çağırıp kendiniz yönetmelisiniz.

DialogWindow'dan türetilen bir iletişim kutusu oluşturma

  1. OpenDialogTest adlı bir VSIX projesi oluşturun ve OpenDialog adlı bir menü komutu ekleyin. Bunun nasıl yapacağı hakkında daha fazla bilgi için bkz . Menü komutuyla uzantı oluşturma.

  2. sınıfını DialogWindow kullanmak için aşağıdaki derlemelere başvuru eklemeniz gerekir (Başvuru Ekle iletişim kutusunun Çerçeve sekmesinde):

    • Presentationcore

    • Presentationframework

    • Windowsbase

    • System.Xaml

  3. OpenDialog.cs dosyasına aşağıdaki using deyimini ekleyin:

    using Microsoft.VisualStudio.PlatformUI;
    
  4. öğesinden DialogWindowtüretilen adlı TestDialogWindow bir sınıf bildirin:

    class TestDialogWindow : DialogWindow
    {. . .}
    
  5. İletişim kutusunu simge durumuna küçültmek ve ekranı kaplayacak şekilde ayarlamak için ve HasMinimizeButton değerini true olarak ayarlayınHasMaximizeButton:

    internal TestDialogWindow()
    {
        this.HasMaximizeButton = true;
        this.HasMinimizeButton = true;
    }
    
  6. yönteminde OpenDialog.ShowMessageBox , mevcut kodu aşağıdakilerle değiştirin:

    TestDialogWindow testDialog = new TestDialogWindow();
    testDialog.ShowModal();
    
  7. Uygulamayı derleyin ve çalıştırın. Visual Studio'nun deneysel örneği görünmelidir. Deneysel örneğin Araçlar menüsünde OpenDialog Çağır adlı bir komut görmeniz gerekir. Bu komuta tıkladığınızda iletişim kutusu penceresini görmeniz gerekir. Pencereyi simge durumuna küçültebilmeniz ve ekranı kaplayabilmeniz gerekir.

DialogWindow'dan türetilmemiş bir iletişim kutusu oluşturma ve yönetme

  1. Bu yordam için, önceki yordamda oluşturduğunuz OpenDialogTest çözümünü aynı derleme başvuruları ile kullanabilirsiniz.

  2. Aşağıdaki using bildirimleri ekleyin:

    using System.Windows;
    using Microsoft.Internal.VisualStudio.PlatformUI;
    
  3. öğesinden Windowtüretilen adlı TestDialogWindow2 bir sınıf oluşturun:

    class TestDialogWindow2 : Window
    {. . .}
    
  4. için IVsUIShellözel başvuru ekleyin:

    private IVsUIShell shell;
    
  5. Başvuruyu olarak IVsUIShellayarlayan bir oluşturucu ekleyin:

    public TestDialogWindow2(IVsUIShell uiShell)
    {
        shell = uiShell;
    }
    
  6. yönteminde OpenDialog.ShowMessageBox , mevcut kodu aşağıdakilerle değiştirin:

    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. Uygulamayı derleyin ve çalıştırın. Araçlar menüsünde OpenDialog Çağır adlı bir komut görmeniz gerekir. Bu komuta tıkladığınızda iletişim kutusu penceresini görmeniz gerekir.