共用方式為


逐步解說: 使用自動化來啟動頁面上儲存使用者設定

您可以從 [開始] 頁面上,來存取 Automation 模型,您可以使用自動化模型,來保存使用者的設定。 藉由遵循本逐步解說中,您可以建立一種控制項,將設定儲存到登錄中,當使用者按下按鈕,然後擷取該設定,每次載入啟動頁面。 起始頁的 [專案] 範本包括可自訂使用者控制項,且預設的啟動頁面 XAML 會呼叫該控制項,因為您沒有修改起始頁本身。

在這個逐步解說中具現化的設定存放區是執行個體的IVsWritableSettingsStore介面,可讀取,並呼叫該物件時,寫入下列登錄位置: HKCU\Software\Microsoft\VisualStudio\10.0\CollectionName

正執行 Visual Studio 的實驗性的執行個體中,設定存放區讀取和寫入 HKCU\Software\Microsoft\VisualStudio\10.0Exp\CollectionName。

如需有關如何保存設定的詳細資訊,請參閱狀態持續性和 Visual Studio 的 IDE狀態持續性的支援。 如需有關 Automation 模型的詳細資訊,請參閱擴充 Visual Studio 環境參考 Automation 組件和 DTE2 物件

必要條件

若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。 您也必須安裝 [起始頁] 專案範本。

注意事項注意事項

如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心 MSDN 網站上。

您可以下載的起始頁的專案範本,藉由使用擴充管理員

設定專案

若要設定在本逐步解說專案

  1. 如所述,使用起始頁] 專案範本,建立起始頁專案起始頁。 為 SaveMySettings 的專案名稱。

  2. 方案總管] 中,將下列組件參考加入至 StartPageControl 專案:

    • EnvDTE EnvDTE80

    • Microsoft.VisualStudio.OLE.Interop

    • Microsoft.VisualStudio.Shell.Interop.10.0

    EnvDTE 和 EnvDTE80 的組件提供自動化的物件模型。 Interop 組件提供 Visual Studio 的命令介面中的特定物件的存取權。

  3. 開啟 [MyControl.xaml]。

  4. 從 [XAML] 窗格中,在最上層UserControl項目定義中,新增下列事件宣告的命名空間宣告之後。

    Loaded="OnLoaded"
    
  5. 在 [設計] 窗格中,按一下該控制項的主要區域,然後按 DELETE 鍵。

    這樣會移除Border項目,而且所有內容,以及只有最上層的分葉Grid項目。

  6. 工具箱,拖曳StackPanel控制項至格線。

  7. 現在將TextBlockTextBox,然後使用按鈕StackPanel

  8. 新增 X:name 屬性的TextBox,以及Click事件Button,如下列範例所示。

    <StackPanel Width="300" HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Width="140" FontSize="14">Enter your setting</TextBlock>
        <TextBox x:Name="txtblk" Margin="0, 5, 0, 10" Width="140" />
        <Button Click="Button_Click" Width="100">Save My Setting</Button>
    </StackPanel>
    

實作使用者控制項

若要實作使用者控制項

  1. 在 [XAML] 窗格中,以滑鼠右鍵按一下Click屬性的Button項目,然後再按一下巡覽至事件處理常式

    這將開啟 MyControl.xaml.cs,以及建立 stub 處理常式的Button_Click事件。

  2. 將下列加入using陳述式至檔案頂端。

    using EnvDTE80;
    using Microsoft.VisualStudio.Shell;
    using Microsoft.VisualStudio.Shell.Interop;
    using System.ComponentModel;
    
  3. 加入私用SettingsStore屬性,如下列範例所示。

    private IVsWritableSettingsStore _settingsStore = null;
    private IVsWritableSettingsStore SettingsStore
    {
        get
        {
            if (_settingsStore == null)
            {
                // Get a reference to the DTE from the DataContext. 
                var typeDescriptor = DataContext as ICustomTypeDescriptor;
                var propertyCollection = typeDescriptor.GetProperties();
                var dte = propertyCollection.Find("DTE", false).GetValue(
                    DataContext) as DTE2;
    
                // Get the settings manager from the DTE. 
                var serviceProvider = new ServiceProvider(
                    (Microsoft.VisualStudio.OLE.Interop.IServiceProvider)dte);
                var settingsManager = serviceProvider.GetService(
                    typeof(SVsSettingsManager)) as IVsSettingsManager;
    
                // Write the user settings to _settingsStore.
                settingsManager.GetWritableSettingsStore(
                    (uint)__VsSettingsScope.SettingsScope_UserSettings,
                    out _settingsStore);
            }
            return _settingsStore;
        }
    }
    

    這個屬性會先取得參考DTE2介面,其中包含自動化物件模型中,從DataContext的使用者控制項,然後使用取得的執行個體 DTE IVsSettingsManager介面。 然後它會傳回目前的使用者設定使用該執行個體。

  4. 在 [填滿Button_Click ,如下所示的事件。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        int exists = 0;
        SettingsStore.CollectionExists("MySettings", out exists);
        if (exists != 1)
        {
            SettingsStore.CreateCollection("MySettings");
        }
        SettingsStore.SetString("MySettings", "MySetting", txtblk.Text);
    }
    

    這會將文字方塊的內容寫入登錄中的"MySettings"集合中的"MySetting"欄位。 如果集合不存在,則會建立它。

  5. 加入下列的處理常式的OnLoaded的使用者控制項的事件。

    private void OnLoaded(Object sender, RoutedEventArgs e)
    {
        string value;
        SettingsStore.GetStringOrDefault(
            "MySettings", "MySetting", "", out value);
        txtblk.Text = value;
    }
    

    這會設定文字的文字方塊中的"MySetting"的目前值。

  6. 建置使用者控制項。

  7. 方案總管] 中,開啟 source.extension.vsixmanifest。

  8. 在資訊清單編輯器中,設定產品名稱 ,儲存我的設定起始頁。

    這會設定起始頁的名稱,因為這是出現在自訂起始頁 列入 選項對話方塊。

  9. 組建 StartPage.xaml。

測試控制項

若要測試使用者控制項

  1. 按 F5。

    實驗性的執行個體的 Visual Studio 就會開啟。

  2. 在實驗性質的例子中,在工具 ] 功能表中,按一下 選項

  3. 環境 節點中,按一下 啟動,然後在 自訂起始頁 清單中,選取 [安裝延伸模組] 儲存我的設定起始頁

    按一下 [確定]。

  4. 關閉 [啟動] 頁面,如果它已經開啟,然後在 檢視 ] 功能表中,按一下 起始頁

  5. 在 [啟動] 頁面上,按一下 MyControl 索引標籤。

  6. 在 [文字] 方塊中,鍵入貓,,然後按一下 儲存我的設定

  7. 關閉 [啟動] 頁面,然後再開啟它。

    「 貓 」 這個字應該顯示在 [文字] 方塊中。

  8. 取代"Dog"這個字的單字 「 貓 」。 請勿按 [[] 按鈕。

  9. 關閉 [啟動] 頁面,然後再開啟它。

    "Dog"這個字應該顯示在 [文字] 方塊中,即使未儲存的設定。 主要原因 Visual Studio 會將工具視窗保留在記憶體中,即使當連接關閉時,直到關閉 Visual Studio 本身。

  10. 關閉 Visual Studio 的實驗性的執行個體。

  11. 按下 F5 以重新開啟實驗性的執行個體。

  12. 「 貓 」 這個字應該顯示在 [文字] 方塊中。

後續步驟

您可以修改儲存和擷取任何數目的自訂設定,藉由使用不同的值,從不同的事件處理常式來取得及設定這個使用者控制項SettingsStore屬性。 只要您使用不同的propertyName的每一個呼叫的參數SetString,值不會覆寫另一個在登錄中。

請參閱

工作

起始頁

參考

DTE2

概念

將 Visual Studio 的命令加入至起始頁