本演练演示如何将对象的公共属性。 属性 窗口。 对这些属性的更改将反映在 属性 窗口上。
系统必备
若要完成本演练,您必须安装 Visual Studio 2010 SDK。
备注
有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。
Visual Studio 包 " 项目模板的位置
Visual Studio 包 " 项目模板可以在 新项目 对话框的三个不同位置找到:
在 Visual Basic 扩展性下。 该项的默认语言是 Visual Basic。
在 C# 扩展性下。 该项目的默认语言是 C#。
在其他项下键入扩展性。 该项的默认语言是 C++。
显示属性设置为 " 属性 " 窗口
在本节中,将创建一个基本的工具窗口包并显示关联的窗口窗格对象的公共属性在 属性 窗口中。
显示属性设置为 " 属性 " 窗口
创建一 Visual Studio 包 " 项目命名 MyObjectProps。
有关如何创建托管 VSPackage 的更多信息,请参见 演练:使用 Visual Studio 创建包模板的菜单命令。
在 选择一种编程语言 页上,选择 Visual C#。 可以使用 Visual Basic 创建包,但是,本演练使用 Visual C#。
在 选择 VSPackage 选项 页上,选择 工具窗口。
在 工具窗口 " 选项卡 页,请将 窗口名称 到 my 对象属性,然后单击 完成。
模板创建托管项目, 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 Exp。
备注
Visual Studio 的两个版本现在处于打开状态。
如果 属性 窗口不可见,请按 F4 打开它。
在 视图 菜单的 Visual Studio Exp, 其他窗口,指向,然后单击 my 对象属性。
窗口将打开,并且窗格的公共属性显示在 属性 窗口。
在 解决方案资源管理器中单击。 在 属性 窗口的属性中消失。 单击 my 对象属性 窗口。 属性再次出现。
将 属性 窗口的 声明 属性设置为 其他。
my 对象属性窗口标题相应更改。
显示工具窗口属性
在本节中,将添加一个工具窗口并显示其属性。 对属性的更改将反映在 属性 窗口上。
显示工具窗口属性
关闭 " Visual Studio Exp。
打开 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; }
这允许访问 MyToolWindow 窗格的 MyControl 访问。
切换到 " 设计 " 视图。
删除按钮控件。 从 工具箱 添加一个复选框添加到上面,左角。
双击复选框。
这将创建 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 Exp。
在 视图 菜单的 Visual Studio Exp, 其他窗口,指向,然后单击 my 对象属性。
窗格的公共属性显示在 属性 窗口。 IsChecked 属性显示在类别中, 我的属性下。
单击 IsChecked 属性。
该声明 MyControl 属性 出现在 属性 窗口的底部。
选择 " my 对象 " 属性 " 窗口的复选框。 为 true的IsChecked 更改。 清除复选框。 为 错误的IsChecked 更改。 更改 IsChecked 的值。 属性 窗口中。 在 " 我的对象 " 属性 " 窗口的复选框更改与新值。
备注
如果必须处理在 属性 窗口或对象公开的属性,请首先调用与 null 选择容器的 OnSelectChange 。在配置属性或对象之后,可以更改更新了 SelectableObjects ,并 SelectedObjects 列表中选择容器。
更改的选择列表
在本节中,将添加一个选择对于基本的属性类列表并使用选择列表显示的工具窗口界面选择。
若要更改选项列表。
关闭 " Visual Studio Exp。
打开 MyToolWindow.cs 或 MyToolWindow.vb,并添加公共类, Simple,到文件的开头,在 namespace 语句和打开。 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 Exp。
在 视图 菜单的 Visual Studio Exp, 其他窗口,指向,然后单击 my 对象属性。
窗口将打开,并且窗格的公共属性显示在 属性 窗口。
选择 " my 对象 " 属性 " 窗口的复选框。 属性 窗口显示 Simple 对象属性、 SomeText 和 只读。 清除复选框。 窗格的公共属性显示在 属性 窗口。
备注
某些文本 显示名称是 我的文本。
最佳做法
在本演练中, ISelectionContainer 实现,以便可选的对象集合和选定的对象集合为同一集合。 只有选定的对象显示在属性浏览器中列出。 有关一次更完整的 ISelectionContainer 实现,请参见 Reference.ToolWindow 示例。
Visual Studio 工具窗口保持在 Visual Studio 会话之间。 有关保留的更多信息工具窗口的状态,请参见 ProvideProfileAttribute。