逐步解說: 公開至 [屬性] 視窗的屬性
這個逐步解說中的物件的公用屬性公開 (expose) 屬性視窗。 您對這些屬性所做的變更會反映在屬性視窗。
必要條件
若要完成這個逐步解說中,您必須安裝Visual Studio 2010 SDK。
注意事項 |
---|
如需有關 Visual Studio 的 SDK 的詳細資訊,請參閱擴充 Visual Studio 的概觀。若要了解如何下載 Visual Studio 的 SDK,請參閱Visual Studio 擴充性開發人員中心 MSDN 網站上。 |
Visual Studio 的封裝專案範本的位置
Visual Studio 的封裝的專案範本,請參閱以下三個不同的位置,在新的專案對話方塊:
在 [Visual Basic 擴充性。 專案的預設語言是 Visual Basic。
在 [C# 擴充性。 專案的預設語言是 C#。
在 [其他專案的型別擴充性。 專案的預設語言是 c + +。
公開屬性] 視窗的屬性
本章節中,方法,您可以建立基本的工具視窗套件,然後顯示公用屬性關聯的視窗窗格內的物件屬性視窗。
若要公開 (expose) 至 [屬性] 視窗的內容
建立Visual Studio套件專案,名為 MyObjectProps。
如需有關如何建立受管理的 VSPackage 的詳細資訊,請參閱逐步解說: 使用 Visual Studio 的封裝範本建立功能表命令。
在選取程式語言 頁面上,選取 視覺 C#。 您可以使用 Visual Basic 來建立封裝,但這個逐步解說中使用視覺化的 C#。
在選取 VSPackage 選項 頁面上,選取 的工具視窗。
在工具視窗選項 頁面上,變更 視窗名稱 到 我的物件內容,然後按一下 [ 完成。
這個樣板會建立受管理的專案中,MyObjectProps。
開啟檔案,也就是 MyToolWindow.cs,並新增下列的欄位,以MyToolWindow類別。
private ITrackSelection trackSel; private SelectionContainer selContainer;
MyToolWindow 類別中加入下列程式碼。
Private ReadOnly Property TrackSelection() As ITrackSelection Get If trackSel Is Nothing Then trackSel = TryCast(GetService(GetType(STrackSelection)), ITrackSelection) End If Return trackSel End Get End Property Public Sub UpdateSelection() Dim track As ITrackSelection = TrackSelection If track IsNot Nothing Then track.OnSelectChange(DirectCast(selContainer, ISelectionContainer)) End If End Sub Public Sub SelectList(ByVal list As ArrayList) selContainer = New SelectionContainer(True, False) selContainer.SelectableObjects = list selContainer.SelectedObjects = list UpdateSelection() End Sub Public Overloads Overrides Sub OnToolWindowCreated() Dim listObjects As New ArrayList() listObjects.Add(Me) SelectList(listObjects) End Sub Private checked As Boolean = False <Category("My Properties")> _ <Description("MyControl properties")> _ Public Property IsChecked() As Boolean Get Return IsChecked End Get Set(ByVal value As Boolean) checked = value control.checkBox1.Checked = value End Set End Property Private sObject As Simple = Nothing Public ReadOnly Property SimpleObject() As Simple Get If sObject Is Nothing Then SimpleObject = New Simple() End If Return sObject End Get End Property Public Sub SelectSimpleList() Dim listObjects As New ArrayList() listObjects.Add(SimpleObject) SelectList(listObjects) End Sub Public Sub SelectThisList() Dim listObjects As New ArrayList() listObjects.Add(Me) SelectList(listObjects) End Sub
private ITrackSelection TrackSelection { get { if (trackSel == null) trackSel = GetService(typeof(STrackSelection)) as ITrackSelection; return trackSel; } } public void UpdateSelection() { ITrackSelection track = TrackSelection; if (track != null) track.OnSelectChange((ISelectionContainer)selContainer); } public void SelectList(ArrayList list) { selContainer = new SelectionContainer(true, false); selContainer.SelectableObjects = list; selContainer.SelectedObjects = list; UpdateSelection(); } public override void OnToolWindowCreated() { ArrayList listObjects = new ArrayList(); listObjects.Add(this); SelectList(listObjects); }
TrackSelection屬性用法GetService以取得STrackSelection服務,提供ITrackSelection介面。 OnToolWindowCreated事件處理常式與SelectList方法一起建立一份選取物件,其中包含只有工具視窗窗格物件本身。 UpdateSelection方法會告知屬性視窗,以顯示工具] 視窗窗格中的公用屬性。
建置並啟動偵錯模式中的專案,按下 f5 鍵。 這會啟動Visual Studio費用。
注意事項 兩個版本的Visual Studio現在已經開啟。
如果屬性視窗屬於不可見,請按 f4 鍵開啟。
在Visual Studio費用] 檢視 功能表上指向其他視窗,然後按一下 我的物件內容。
視窗隨即開啟,而且視窗窗格的公用屬性出現在屬性視窗。
按一下 [在方案總管] 中。 在 [屬性屬性視窗消失。 按一下 [ 我的物件內容視窗。 內容會重新出現。
變更標題 屬性在 屬性 ] 視窗來 東西其他。
我的物件內容視窗的標題會隨之改變。
公開工具視窗的屬性
本章節中,您可以新增一個工具視窗,並顯示其屬性。 您對屬性所做的變更會反映在屬性視窗。
若要公開 (expose) 工具視窗屬性
關閉Visual Studio費用。
開啟 MyToolWindow.cs,並新增public boolean屬性IsChecked MyToolWindow 類別。
Private checked As Boolean = False <Category("My Properties")> _ <Description("MyControl properties")> _ Public Property IsChecked() As Boolean Get Return IsChecked End Get Set(ByVal value As Boolean) checked = value control.checkBox1.Checked = value End Set End Property
[Category("My Properties")] [Description("MyControl properties")] public bool IsChecked { get { if (base.Content == null) return false; return (bool)((MyControl) base.Content).checkBox1.IsChecked; } set { ((MyControl) base.Content).checkBox1.IsChecked = value; } }
這個屬性讀取,並直接從您在接下來的步驟中建立 WPF 核取方塊將其狀態。
在MyToolWindow建構函式,加入this關鍵字MyControl建構函式:
control = New MyControl(Me)
base.Content = new MyControl(this);
開啟檔案,也就是 MyControl.xaml.cs,並使用下列程式碼來取代建構函式。
Private pane As MyToolWindow Public Sub New(ByVal pane As MyToolWindow) InitializeComponent() Me.pane = pane checkBox1.Checked = pane.IsChecked End Sub
private MyToolWindow pane; public MyControl(MyToolWindow pane) { InitializeComponent(); this.pane = pane; checkBox1.IsChecked = false; }
這可讓MyControl存取MyToolWindow窗格。
變更為 [設計] 檢視中。
刪除 [button] 控制項。 新增一個核取方塊,從工具箱到上方,左上角。
連按兩下核取方塊。
這會建立checkBox1_Checked事件處理常式,在 [程式碼編輯器中開啟。
在 [屬性] 視窗中,連按兩下 checkBox1未核取事件處理常式。
這會建立checkBox1_Unchecked事件處理常式,在 [程式碼編輯器中開啟。
使用下列程式碼中取代] 核取方塊的事件處理常式。
Private Sub checkBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles checkBox1.CheckedChanged pane.IsChecked = checkBox1.Checked pane.UpdateSelection() If pane.IsChecked Then pane.SelectSimpleList() Else pane.SelectThisList() End If End Sub
private void checkBox1_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.UpdateSelection(); } private void checkBox1_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.UpdateSelection(); }
建置並啟動偵錯模式中的專案,按下 f5 鍵。 這會啟動Visual Studio費用。
在Visual Studio費用] 檢視 功能表上指向其他視窗,然後按一下 我的物件內容。
[視窗] 窗格的公用屬性會出現在屬性視窗。 IsChecked 屬性就會出現在 [類別] 我內容。
按一下 [ IsChecked 屬性。
描述 MyControl 屬性 的下方會顯示 屬性視窗。
在 [我的物件屬性] 視窗中,選取核取方塊。 IsChecked 變成 ,則為 True。 清除核取方塊。 IsChecked 變成 ,則為 False。 正值使 IsChecked 在屬性視窗。 在 [我的物件屬性] 視窗變更,以符合新的值] 核取方塊。
注意事項 如果您必須處理屬性或物件顯示在屬性視窗中,呼叫OnSelectChange與null選擇容器第一個。之後處置物件的屬性,您可以變更為 [已更新的選取項目容器SelectableObjects和SelectedObjects列出。
變更選取項目清單
本章節中,加入基本的屬性類別的選取項目清單,並使用工具視窗介面來選擇要顯示哪一個選取項目清單。
若要變更選取項目清單
關閉Visual Studio費用。
開啟 MyToolWindow.cs 或 MyToolWindow.vb,並加入公用的類別, Simple,而只會在命名空間陳述式之後的檔案,開頭,並開啟 curlique 括號。
Public Class Simple Private m_someText As String = "" <Category("My Properties")> _ <Description("Simple Properties")> _ <DisplayName("MyText")> _ Public Property SomeText() As String Get Return m_someText End Get Set(ByVal value As String) m_someText = value End Set End Property <Category("My Properties")> _ <Description("Read-only property")> _ Public ReadOnly Property [ReadOnly]() As String Get Return "Hello" End Get End Property End Class
public class Simple { private string someText = ""; [Category("My Properties")] [Description("Simple Properties")] [DisplayName("MyText")] public string SomeText { get { return someText; } set { someText = value; } } [Category("My Properties")] [Description("Read-only property")] public string ReadOnly { get { return "Hello"; } } }
型別的物件Simple有公用字串屬性, SomeText,以及ReadOnly。
加入下列程式碼的結尾MyToolWindow類別,只在 IsChecked 屬性之後。
Private sObject As Simple = Nothing Public ReadOnly Property SimpleObject() As Simple Get If sObject Is Nothing Then SimpleObject = New Simple() End If Return sObject End Get End Property Public Sub SelectSimpleList() Dim listObjects As New ArrayList() listObjects.Add(SimpleObject) SelectList(listObjects) End Sub Public Sub SelectThisList() Dim listObjects As New ArrayList() listObjects.Add(Me) SelectList(listObjects) End Sub
public void SelectSimpleList() { ArrayList listObjects = new ArrayList(); listObjects.Add(SimpleObject); SelectList(listObjects); } public void SelectThisList() { ArrayList listObjects = new ArrayList(); listObjects.Add(this); SelectList(listObjects); }
這會建立 [單一] 屬性中, SimpleObject,和兩個方法,以切換屬性視窗選取項目在窗格之間以及Simple物件。
在 [程式碼] 檢視中開啟 MyControl.cs 或 MyControl.vb。 這行程式碼中取代] 核取方塊的處理常式:
If pane.IsChecked Then pane.SelectSimpleList() Else pane.SelectThisList() End If
private void checkBox1_Checked(object sender, RoutedEventArgs e) { pane.IsChecked = true; pane.SelectSimpleList(); pane.UpdateSelection(); } private void checkBox1_Unchecked(object sender, RoutedEventArgs e) { pane.IsChecked = false; pane.SelectThisList(); pane.UpdateSelection(); }
建置並啟動偵錯模式中的專案,按下 f5 鍵。
這會啟動Visual Studio費用。
在Visual Studio費用] 檢視 功能表上指向其他視窗,然後按一下 我的物件內容。
視窗隨即開啟,而且視窗窗格的公用屬性出現在屬性視窗。
在 [我的物件屬性] 視窗中,選取核取方塊。 屬性 ] 視窗會顯示Simple物件的屬性, SomeText 和 ReadOnly。 清除核取方塊。 [視窗] 窗格的公用屬性會出現在屬性視窗。
注意事項 顯示名稱某些文字 是 我文字。
最佳作法
在這個逐步解說中, ISelectionContainer的實作,以便能選取的物件集合,並選取的物件集合是相同的集合。 選取的物件會出現在屬性瀏覽器] 清單中的色彩。 取得更完整的 ISelectionContainer 實作中,請參閱 Reference.ToolWindow 範例。
Visual Studio 的工具視窗會持續 Visual Studio 的工作階段之間。 如需有關如何保存的工具視窗狀態的詳細資訊,請參閱ProvideProfileAttribute。