在 Visual Studio 2010 SDK 包括的 WPF 工具箱控件模板使您创建 windows presentation (WPF) 自动添加到 工具箱的基础控件,当安装扩展。 本演练演示如何使用模板创建可以将其分发给其他用户的计数器控件。
系统必备
若要完成本演练,您必须安装 Visual Studio 2010 SDK。
备注
有关 Visual Studio SDK 的更多信息,请参见 扩展 Visual Studio 概述。若要查找有关中所列如何下载 Visual Studio SDK,请 Visual Studio Extensibility Developer Center 参见 MSDN 网站上。
查找在 Visual Studio 的 WPF 工具箱控件模板
WPF 工具箱控件模板可在 新项目 对话框中,在 安装的模板下,在以下位置:
Visual Basic, 扩展性。 该项目的语言是 Visual Basic。
Visual C#, 扩展性。 该项目的语言是 C#。
创建 WPF 工具箱控件项目
WPF 工具箱控件模板创建一个未定义用户控件并提供需要将控件添加到 工具箱的所有功能。
创建项目
在**“文件”菜单上,单击“新建”,然后单击“项目”**。
在 新项目 对话框中,在 安装的模板下,单击这种首选编程语言的节点然后选择 扩展性。 在 " 项目类型列表中,选择 WPF 工具箱控件。
在 名称 框中,键入要用于项目的名称。 (本演练使用名称 计数器。)单击**“确定”**。
这将创建在 工具箱包含一个用户控件,特性放在控件中, VSIX,并为部署清单的解决方案。 名称 框设置解决方案的名称和命名空间的名称,但是,它不设置控件的名称,当出现在 工具箱。 稍后将安装可在演练。
生成控件的用户界面
计数器 控件需要三个子控件:两个 Label 控件显示文本和当前计数的和 Button 控件重新设置计数为 0。 ,因为承载应用程序将增大计数器程序模型,而无需使用其他子控件。
生成用户界面
在 解决方案资源管理器,打开该对话框的双击 ToolboxControl.cs 在设计器。
选择 Grid 控件然后单击出现在网格的顶部和左侧将该任务划分为两行和两列的蓝色竖线。
从 工具箱,将 Label 控制对每个网格中的第一行中的单元格。
此时,您可以通过在网格的元素设置控件的格式。 相反,可以直接编辑可扩展应用程序标记语言 (xaml),以便控件将动态调整大小以适合文本。
在 XAML 窗格中,设置 RowDefinition 元素的高度和 ColumnDefinition 元素的宽度设置为 “auto”。
编辑按钮和两个标签的标记可能类似于以下示例。
<Button Content="Reset" Name="button1" Click="button1_Click" Grid.Row="1" Grid.ColumnSpan="2" /> <Label Content="{Binding Text}" Grid.Row="0" Grid.Column="0" Name="label1" /> <Label Content="{Binding Count}" Grid.Row="0" Grid.Column="1" Name="label2" />
Grid.Row 和 Grid.Column 属性设置元素的位置在网格中。 在按钮的 Grid.ColumnSpan 属性使第一列独立按钮的宽度调整大小。
标签的 Content 属性使用一 {Binding} 语法绑定到在本演练稍后定义的属性。
编码的用户控件
计数器 控件是否显示方法递增计数器、引发事件的,只要计数器增加, 重置 按钮和三个属性存储当前计数,显示文本,并显示或隐藏 重置 请按。 ProvideTolboxControl 属性确定在 工具箱计数器 控件在何处出现。
您可以编写此控件编写一个 windows 窗体控件,也就是说,使用事件处理程序和象组公共的方法标签的内容。 但是,在 WPF 可以设置该控件的数据上下文,以便将 XAML 元素属性直接添加到代码的属性。 此模型还提供了一个抽象层从控件的用户界面分隔 (UI)核心功能。
本演练演示如何创建数据模型类,然后将该控件的数据上下文到数据模型。
创建数据模型
双击按钮打开代码窗口。
在文件的顶部,添加 System.ComponentModel 命名空间 using 指令。
在生成的类之后,请创建公共类定义数据上下文。
public class MyDataModel : INotifyPropertyChanged
此类实现 INotifyPropertyChanged 接口,使 XAML 元素绑定到定义的属性。
右击 INotifyPropertyChanged 接口声明,单击 实现接口,然后再次单击 实现接口 。
Visual Studio 声明 PropertyChanged 事件。
在事件声明之后,创建以下私有方法引发事件。
public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
创建以下私有字段和公共属性表示两个标签的值在控件中。
private string text = "Count:"; public string Text { get { return this.text; } set { this.text = value; RaisePropertyChanged("Text"); } } private int count = 0; public int Count { get { return this.count; } set { this.count = value; RaisePropertyChanged("Count"); } }
引发 PropertyChanged 操作以绑定的 XAML 更新绑定控件的内容。 ,除非它们绑定到此数据上下文,将设置为 public 的属性使其可供到设计器,但是,不其他程序。
您已经创建了一个数据模型,可以实现代码在控件的功能之后。
实现控件
在实现该控件分部类的定义,请右击类名,单击 重构,单击 重命名,然后更改类的名称。 计数器。 这是在 工具箱 要显示的名称,当安装扩展。
紧邻类定义,在 ProvideToolboxControl 属性声明,将第一个参数的值是从 “计数器” 到 “常规”。 这将设置承载在 工具箱的控件项目组的名称。
下面的示例演示 ProvideToolboxControl 属性和调整的类定义。
[ProvideToolboxControl("General", true)] public partial class Counter : UserControl
如下面的示例所示,创建一个私有字段来存放数据上下文控件,然后构造函数,分配数据上下文。 MyDataModel 类,。
private MyDataModel dm; public Counter() { this.DataContext = new MyDataModel(); dm = (MyDataModel)DataContext; InitializeComponent(); }
创建下列公共属性反射从数据上下文的 Text 和 Count 属性。
public string Text { get { return dm.Text; } set { dm.Text = value; } } public int Count { get { return dm.Count; } }
这些属性是由数据上下文将该内容可用于包含控件的所有应用程序。
创建下列公共方法递增计数器和一个事件通知承载的应用程序。
public event EventHandler Incremented; public void Increment() { dm.Count ++; if (Incremented != null) { Incremented(this, EventArgs.Empty); } }
按如下方式实现 重置 按钮的 click 处理程序。
private void button1_Click(object sender, RoutedEventArgs e) { dm.Count = 0; }
将下面的公共属性显示或隐藏 重置 按钮。
public Visibility ShowReset { get { return button1.Visibility; } set { button1.Visibility = value; } }
测试控件
若要测试 工具箱 控件,请先测试它在开发环境中然后测试其在承载的应用程序。
测试控件
按 F5。
这将生成项目并打开安装的控件 Visual Studio 的第二个实例。
在 Visual Studio 的新实例,请创建 WPF 应用程序项目。
在 解决方案资源管理器,打开该对话框的双击 MainWindow.xaml 在设计器。
从 工具箱的 泛型 部分,请 计数器 控件拖动到窗体上,然后选择它。
在 属性 " 窗口中显示 Text 和 ShowReset 属性,而从 UserControl继承的其他属性。 Count 属性,因为它是只读的,不应显示。
更改 Text 属性的值。
在设计器中显示的标签文本应更改。
设置 ShowReset 属性设置为 Hidden,然后将到 Visible。
在控件的 重置 按钮会消失然后再次出现。
Button 控件拖动到窗体上,将其 Content属性设置为 测试,然后双击按钮以打开其代码视图中单击处理程序。
实现 click 处理程序调用控件的 Increment 方法。
private void button1_Click(object sender, RoutedEventArgs e) { counter1.Increment(); }
在构造函数,因此,在对 InitializeComponent的调用中,键入 counter1.Implemented +=,然后按 tab 键生成 Counter.Incremented 事件后处理程序。
如下面的示例所示,实现新的处理程序。
public MainWindow() { InitializeComponent(); counter1.Incremented += new EventHandler(counter1_Incremented); } void counter1_Incremented(object sender, EventArgs e) { button1.Opacity -= .2; }
按 F5。
WPF 应用程序将打开。
单击**“测试”**。
略微,如果类? 计数器应增加和按钮。
再单击 测试 多次。
计数器应增加,而按钮应继续到类?,直到消失。 如果继续单击按钮的位置,计数器应继续增加。
单击**“重置”**。
计数器应重置为 0。
后续步骤
在生成 工具箱 控件时, Visual Studio 创建在 \ bin 名为的 ProjectName.vsix 一个文件 \ 项目的 debug \ 文件夹。 可以通过上载 .vsix 文件部署该控件连接到网络或网站。 当用户打开 .vsix 文件时,该控件安装并将其添加到 Visual Studio 工具箱。 ,或者,如果上载 .vsix 文件添加到 Visual Studio Gallery 网站,以便用户可以浏览找到它在 扩展管理器。