技术开发 频道

WPF学习之路:从HelloWorld到WPF World

  基元素

  现在改动一下程序,我们添加一个按钮,点击该按钮,显示一个消息框。

1

1

 

  在上面我们了解到WPF中Xaml负责UI,cs负责实现逻辑(显示消息框)。那么它们是如何关联起来的呢(请注意图中蓝线)?原来在WPF中,凡是与UI元素类均从一个基元素继承—— DependencyObject而来,这些类分别在cs和xaml中有相同签名的实现。我们在开发过程中只需要取相同的名字,WPF会自动替我们完成关联工作。

  注意:如果在C#代码中将button1_Click改为OnBtnClick,Xaml中不会自动改

  属性

  现在仔细观察一下IDE自动生成的代码,如果Asp或HtmlXml一样,我们会发现每个元素标签,除了标签名外都包含一些属性。除了在C#中我们熟知的Text="Hello World",Name="button1"外还包含Asp.NET中常见的Margin属性(用于说明Button在父容器中与其他元素的间隔距离)。前者与C#中的属相相同,后者则不属于对象本身,依赖于父元素,在WPF中成为附加属性(比如,如果Button不在一个父元素(Grid)中,那么它与其他元素就无所谓相对距离了)。

  在上小节中,我们知道WPF负责将Xaml元素与C#中的类一一对应起来,在Xmal中改变Button.Height的值时,cs中同样会做相应的改动,那么它们是如何实现的呢?原来WPF提供了一套属性系统,该系统提供一种方法来基于其他输入的值计算属性值。有了这套系统,我们在Xmal与cs之间访问属性时WPF会自动通知彼此,支持这些服务的属性通常称为依赖属性。

  样式和模板  想象一下我们继续修改Hello World程序,如果需要添加10个或100个相同Button,这些Button针对不同的用户有不同的样式。那么我们该如何支持这些样式呢?是在xmal中一个一个的写吗?当然不可能。既然Xaml类似于Asp.Net,那么我们不难想到网页中常用的CSS,在WPF中同样有属于Xaml的Css,并且更强大,那就是样式和模板。

  WPF样式设置和模板提供了一套功能(样式、模板、触发器和演示图板),让我们能够使用这些功能创建更好的视觉效果,也可以为创建统一外观,并且能够在应用程序内部和应用程序之间共享这些样式和模板,从而提供工作效率。

  资源

  在上小节中,我们提到了样式和模板,这些在WPF中属于资源。除此之外,WPF中的资源也包括C#中我们通常理解的文件,多媒体,数据等。只是在WPF中资源可分为静态资源和动态资源。从名字上很好理解它们的区别,一个性能好点,一个更灵活。做为入门,在使用时,是否需要实时更新资源可作为我们选择静态资源和动态资源的依据。

  总结

  学到了什么  通过上面一系列描述,我们发现了WPF中的一些基本概念:Xaml,元素树,基元素,属性,样式和模板,资源。这些都是初学WPF时最早接触到的内容。因篇幅所限,只能对这些内容做一个大概的介绍,使得我们能够从中一窥WPF的样貌。但做为初学者,充分理解把握这些内容是进一步学好WPF的关键。

  如何学习

  在上面的学习过程中,我们不难发现,学习任何一门技术都要从最简单的地方开始,然后通过仔细观察,发现问题,思考问题,并最终解决问题。其中最重要的是要勤于思考,而不是浮于表面。

  下一步该做什么

  今天我们从整体上对WPF有个粗略的了解,并发现了一些基本概念。虽然还有很多重要的内容如数据绑定,事件路由,线程模型等没有涉及到,但是本着贪多嚼不烂的原则,下一步我们应该对今天所涉及到的每个概念做深入的学习,然后经过反复的联系,最终能真正了解它们。

3
相关文章