用户控件:窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  【原文地址】Tip/Trick: Creating and Using Silverlight and WPF User Controls

  【原文发表日期】Friday, April 04, 2008 1:37 AM

  Silverlight和WPF个根本性设计目标是允许开发人员能轻松地将UI功能封装进可重用Control控件

  你可以从个现有Control类(Control基类或者象TextBox和Button这样Control控件)继承而来实现新自定义Control控件或者你也可以创建可重用用户Control控件可以方便地使用XAML标识文件组成个Control控件UI(因此建造起来容易的极)

  在我Digg教程系列贴子第 6部分中我示范了如何使用VS 2008“添加新项”对话框创建个新用户Control控件然后在其中定义UI这个思路方法在你预先知道你想要在用户Control控件里封装UI时非常有效你还可以在Expression Blend中使用同样技术

  将现有UI封装成用户Control控件

  有时候只有在你已经开始在父页或父Control控件上定义些UI的后你才知道你要将某些UI功能封装成可重用用户Control控件

  例如我们也许正设计个表单要允许用户输入运输和结帐信息我们也许会先创建些UI来封装地址信息要达成目我们可以往页面上加个<border>Control控件在其中内嵌个网格布局面板(2列4行)然后往其中放置标签和文本框Control控件:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  在仔细地布局完的后我们也许会想到“嗨对结帐地址我们也要用完全UI也许我们应该创建个可重用地址用户Control控件这样我们可以避免重复自己”

  我们可以使用“添加新项”项目模板方式来创建个空白新用户Control控件然后将上面UI内容拷贝进去

  但个可在Blend中使用更快诀窍是在设计器中选中我们要封装成用户Control控件Control控件们然后右击选择“做成Control控件”菜单选项:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  当我们选择“做成Control控件”菜单项时Blend会提示我们输入要创建新用户Control控件名称:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  我们将其命名为“AddressUserControl”然后点击OK这会导致Blend创建个新用户Control控件内含我们选中内容:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  在重新编译项目回到原先页面后我们将看到跟以前UI除了地址UI现在被封装进AddressUserControl外:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  我们可以将第个AddressUserControl命名为“ShippingAddress”然后在页面上添加该用户Control控件第 2个例子来记录结帐信息(我们将这第 2个Control控件例子命名为“BillingAddress”):

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  现在假如我们要改变地址外观我们可以只在个地方做改动然后就可以将该改动同时施用到运输和结帐信息上去

  将地址对象数据绑定到AddressUserControl

  至此我们有了些用户Control控件封装了了地址UI让我们来创建个Address数据模型类我们可以用来数据绑定到用户Control控件上我们将定义象下面这样类(利用了新自动属性语言特性):

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  然后在我们Page.xaml文件后台代码文件中我们可以生成我们Address类2个例子个为运输地址个为结帐地址(为这个例程我们将在地址对象中填充伪数据)然后我们将通过编程手段将地址对象绑定到页面上AddressUserControlControl控件上去我们这样做把每个用户Control控件“DataContext”属性设成合适运输或结帐数据模板例子:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  最后步是用声明方式在 AddressUserControl.xaml 文件中加个{Binding}语句用来配置用户Control控件中TextBoxControl控件Text属性和绑定到用户Control控件上Address数据模型对象属性间双向数据绑定关系

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  当我们点击F5运行应用时我们将得到Address数据模型对象和AddressUserControl自动数据绑定:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  我们将{Binding}声明设置成了“Mode=TwoWay”用户在文本框中做改动会自动地推送到Address数据模型对象中去(不用写任何代码就可实现)

  例如我们可以将浏览器中原先运输地址改成送到迪斯尼:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  假如我们在Save按钮Click事件处理中加个断点然后点击按钮我们可以看到上面文本框变动是如何自动反映到我们“_shippingAddress”数据模型对象:

窍门技巧/诀窍:创建和使用Silverlight 和 WPF 用户Control控件

  然后我们可以实现 SaveBtn_Click 事件处理将运输和结帐Address数据模型对象按我们方式持久化而不用手工获取或对页面上UIControl控件做什么操作

  WPF和Silverlight支持这个干净视图/模型分离使得后期改动地址用户Control控件极其容易且不必更新页面中任何代码它还使得轻松地对功能进行单元测试成为可能(请阅读我最新贴子了解Silverlight单元测试详情)



  结语

  WPF和Silverlight方便你将UI功能封装进Control控件它们支持用户Control控件机制就提供了个非常容易方式用户Control控件和数据绑定结合促成了些很好视图/模型分离场景允许你在操作数据时编写非常干净代码

  如果你想在自己机器上运行你可以在这里下载上面例程完整版本

  想进步了解Silverlight和WPF请参阅我Silverlight教程和链接网页 我还高度推荐Karen Corby在MIX08上做精彩讲座(讨论了用户Control控件自定义Control控件样式化Control控件模板等)你可以在这里免费在线观看该讲座

  希望本文对你有所帮助



Tags:  asp.net用户控件 用户控件

延伸阅读

最新评论

发表评论