本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文
建議使用 Visual Studio 2017

擴充強制回應對話方塊

 

若要保證與 Visual Studio 的功能和視覺相容性,請建立 Visual Studio 擴充功能的強制回應對話方塊,方法是從 Microsoft.VisualStudio.PlatformUI.DialogWindow 物件衍生對話方塊視窗。 以這種方式衍生的對話方塊也可以提供其他功能;例如,您可以設定 F1 說明目標,以及啟用視窗的最小化和最大化。

  1. 在您的專案中,加入 System.XAML 的參考。

  2. 方案總管 中,以滑鼠右鍵按一下專案,然後按一下 [加入],再按一下 [視窗]。

  3. 提供視窗的名稱,然後按一下 [加入]。

    空的 XAML 視窗隨即出現在設計工具中。

  4. 在最上層 Window 項目中,加入 Microsoft.VisualStudio.PlatformUI 的命名空間宣告,並將 Window 項目變更為 Microsoft.VisualStudio.PlatformUI.DialogWindow 項目,如下列範例所示。

    <ui:DialogWindow x:Class="Microsoft.VSModalDialog.MyModalDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ui="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.11.0"
        Title="MyModalDialog" Height="100" Width="320">
    
  5. 從 [工具箱] 中加入按鈕、標籤和其他控制項,並輸入文字標籤,然後調整對話方塊的外觀。

  6. 切換至程式碼檢視。

  7. 在類別定義中,設定要繼承自 DialogWindow 的類別 。 (根據預設,類別繼承自 System.Windows.Window)。

  8. 加入按鈕和其他控制項的事件處理常式。

在強制回應對話方塊中加入 F1 說明

  1. 針對建構函式,加入接受字串作為其引數的參數,並使用相同的參數來設定建構函式繼承自基底建構函式,如下列範例所示。

    // Use this constructor to provide a Help button and F1 support.
    public MyModalDialog(string helpTopic) : base(helpTopic)
    {
        InitializeComponent();
    }
    

    這個建構函式將 HasHelpButton 屬性設定為 true,並在使用者按 F1 或按一下 [說明] 按鈕時,將接收到的字串當成關鍵字使用。

在強制回應對話方塊中加入最小化和最大化按鈕

  1. 在建構函式中,將 P:Microsoft.VisualStudio.PlatformUI.DialogWindow.hasMinimizeButtonP:Microsoft.VisualStudio.PlatformUI.DialogWindow.hasHMaximizeButton 屬性設定為 true,如下列範例所示。

    // Use this constructor for minimize and maximize buttons and no F1 Help.
    public MyModalDialog()
    {
        this.HasMaximizeButton = true;
        this.HasMinimizeButton = true;
        InitializeComponent();
    }
    
    System_CAPS_warning警告

    顯示 [最小化] 和 [最大化] 按鈕時,會隱藏 [說明] 按鈕,即使 HasHelpButton 屬性設定為 true 也是一樣。

下列範例示範具有兩個建構函式的強制回應對話方塊。 第一個建構函式接受 F1 關鍵字作為引數,並顯示 [說明] 按鈕。 第二個建構函式未接受任何引數,但會顯示 [最小化] 和 [最大化] 按鈕。 當您按一下 [是] 按鈕時,會叫用對話方塊的第二個執行個體,並啟用 [說明]。

<ui:DialogWindow x:Class="Microsoft.VSModalDialog.MyModalDialog"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ui="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.11.0"
    Title="MyModalDialog" Height="100" Width="320">
    <Grid Height="60" Width="300">
        <Label Content="Would you like to view this dialog with Help enabled?" Height="25" Name="label1" VerticalAlignment="Top" />
        <Button Content="Yes" Name="btnYes" Click="btnYes_Click" Height="25" Width="75" HorizontalAlignment="Left" Margin="0,30,0,0" />
        <Button Content="No" Name="btnNo" Click="btnNo_Click" Height="25" Width="75" HorizontalAlignment="Left" Margin="80,30,0,0" />
    </Grid>
</ui:DialogWindow>
using System.Windows;
using Microsoft.VisualStudio.PlatformUI;

namespace Microsoft.VSModalDialog
{
    // Use this constructor to enable F1 Help.
    public partial class MyModalDialog : DialogWindow
    {
        // Use this constructor to provide a Help button and F1 support.
        public MyModalDialog(string helpTopic) : base(helpTopic)
        {
            InitializeComponent();
        }

        // Use this constructor for minimize and maximize buttons and no F1 Help.
        public MyModalDialog()
        {
            this.HasMaximizeButton = true;
            this.HasMinimizeButton = true;
            InitializeComponent();
        }

        private void btnYes_Click(object sender, RoutedEventArgs e)
        {
            var v = new MyModalDialog("Microsoft.VisualStudio.PlatformUI.DialogWindow");
            v.Content = "Here you go.";
            v.ShowModal();
            this.Close();
        }

        private void btnNo_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.MessageBox.Show("Okay.");
            this.Close();
        }
    }
}

下列程式碼會從事件處理常式叫用對話方塊。

private void MenuItemCallback(object sender, EventArgs e)
{
    // Create the dialog instance without Help support.
    var d = new MyModalDialog();
    // Show the dialog.
    var m = d.ShowModal();
}
顯示: