RSS 2.0 Feed
2008-03 Entries
摘要:(第一部分) 样式和控件模板 创建界面时,我们经常重复性地为很多控件设置外观属性,比如,我们希望所有的 Label 都显示为“Bold Trebuchet 12px”的字体,如果是 HTML,我们很容易用 CSS 实现,但如果是 WinForm,则会比较麻烦。WPF 引入了 Style 标签来满足这一常见的需求。先来看一个例子: <StackPanel>    <StackPanel.Resources>       <Style TargetType="{x:Type Label}">          <Setter Property="FontFamily" Value="Trebuchet" />          <Setter Property="FontSize" Value="12" />          <Setter Property="FontWeight" Value="Bold" />       </Style>    </StackPanel.Resources>    <Label>Here is some text.</Label>    <Label>More text.</Label>    <Label>The last bit of text.</Label> </StackPanel> Style 标签中最常用的是 Setter 语法,从示例中你看到的,Setter 标签指定了样式相关的属性名和我们赋给该属性的值。是不是很简单?上一节中,我们讨论过的数据模板,它可以根据设定的数据类型来匹配,也可以根据指定的 key 来精确匹配,另外,数据模板的书写位置决定了它的作用范围。Style 标签同样适用类似的规则。这个例子中,Style 标签处在 StackPanel 的资源中,匹配类型为 Label 的标签,则此 StackPanel 内的所有标签都将适用此 Style 标签指定的样式。当然如果需要,你也可以为其中一些 Label 单独设定样式。另外一个有用的属性是 BaseOn,它允许 Style 标签间的“继承”关系: <StackPanel>   <StackPanel.Resources>     <Style x:Key="baseStyle" TargetType="{x:Type Control}">       <Setter Property="FontFamily" Value="Trebuchet" />       <Setter Property="FontSize" Value="12" />       <Setter Property="FontWeight" Value="Bold" />     </Style>     <Style BasedOn="{StaticResource......[阅读全文]

posted @ | Feedback (0) |

摘要:感觉一年多时间以来,状态遭透了,荒芜了这片自留地,不过还好,这只是自留地,不会有太多人时常关注。这次为了避免被开心开除,先发几篇译文。 这篇译文是我为了学习 WPF 找到的,我认为是我见到最好的 WPF 入门教程。我不知道是否有其他人翻译过,我简单的 Google 了一圈,似乎是没有,因此贴出来给大家共享。另外,从这篇文章开始,我的文章原则上不再发布到博客堂首页了,最近很喜欢清静。 原文地址: http://dotnetslackers.com/articles/silverlight/WPFTutorial.aspx  因为原文很长,我可能将它分两三次来发。另外,如果你发现已经有人译过的话,也告诉我,那我就不用献丑了,呵呵。 WPF Tutorial Published: 16 May 2007 By: Rob Eisenberg  (作者的博客) 微软发布新技术的速度总是快得难以追赶上,WPF就是这样的例子。WPF和以往构建用户界面的任何框架都不一样。本文尝试着给您一幅WPF的全景鸟瞰图,向您介绍WPF技术中最关键也最革新的思维方式,以期使您充分地了解它的威力,并能够顺利地展开进一步的学习。 简介 Windows Presentation Foundation (通常被我们简称做WPF),是Windows平台上创建用户界面的全新框架。它是WinForm窗体技术的换代品,它能够充分发挥现代PC在多媒体支持方面的潜力。WinForm通过包装底层的经典Win32 GDI+接口实现用户界面,WPF则抛弃了这一路线,使用.NET技术自下而上构建了全新的API框架。它的强大威力在于基于矢量的绘图能力,支持硬件加速,以及不依赖于设备分辨率。 或许你在WPF中找到了那些你在WinForm开发中常用的控件:Button, ComboBox, ListBox等。但在WPF开发中,你的UI设计器完全不同于以往,不再有设计器生成的构建画面控件及布局的代码文件,不再有设计器生成的资源文件。WPF使用XML,也就是XAML。千万别被这个新特点吓跑,你将发现它并不如想象中的困难,它很符合直觉,或许你还会认为充满乐趣。WPF拥有许多全新的功能,下图展示了其中最重要的一部分: 图 1: WPF中重要的功能 Important WPF Features 表的右列中,列出了一些WPF之前的技术,你或许会觉得它们有相似点。希望会对你认识左列中的新术语有所帮助,但请不要把它们想得太像,差别还是很大的。 除了上面介绍到的功能,WPF引入了一种新的程序运行方式。你仍然可以做成标准的Windows应用程序,新的选择是XBAP: the XAML Browser Application。你将XBAP程序放置到Web服务器上,把地址链接告诉你的使用者,使用者通过浏览器访问,XBAP程序就可以在浏览器的沙盒中运行了。这种体验有点类似于Flash,但仅限于IE用户(版本6以上)和其他一些支持WebControl的浏览器(如Firefox可以通过它的IE-tab)。你可以设想到,这很适合于为企业、公司创建应用程序,如果他们的职员主要工作在Windows XP或Windows Vista上的话。但是,影响选择XBAP的一个问题或许是,需要在客户端安装.NET Framework 3.0(译注:或3.5)。微软正在研发中的Silverlight(之前称为WPF/E),将是一个跨平台的、跨浏览器的新选择,它将包含.NET Framework的一个子集和WPF技术的子集。 你准备开始了吗?你需要准备好开发工具。WPF是.NET Framework 3.0(或3.5)的一部分,首先,你得知道,.NET 3.0应安装在Windows XP Service Pack 2以上、Windows Server 2003 Service Pack 1以上,或者Windows Vista操作系统上,你可以从这里下载最新的.NET Framework(注:3.5版)。安装3.0的同时,.NET 2.0也会被安装,如果你的机器上没有2.0的话,这是因为3.0是2.0的超集。我猜你更希望使用Visual Studio的集成开发环境来学习,你可以下载一个试用版的Visual Studio 2005。(注意那文件可不小,得花点时间的。),和对.NET 3.0的扩展支持包。(译注:建议直接用Visual Studio 2008)另外,我还建议你去WPF的官方站点逛逛。 打开开发环境,WPF的画面设计器和WinForm的很相像,但它们还是差别很大。你可以通过标签切换画面效果和XAML代码。而更为专业的工具是Expression Blend(之前称为Expression Interactive Designer),你可以从这里下载它的试用版。如果你希望界面有特别的外观效果,你应该去试试它。它有些像Adobe Illustrator,不过它用于XAML的编辑,并且和VS集成得很好。设计师可以以他们熟悉的方式工作,并且产生的XAML代码直接用于产品,设计师的参与度大大加强了。以往的工作模式中,设计师将设计出的效果图转交给开发队伍后,开发人员需要用编程的方式将画面重新实现出来,并且还会因为难以实现而放弃某些设计效果。你还可以考虑第三方的Mobiform's Aurora,我强烈建议你试一下。除此以外,还有很多插件用于将其他流行软件制作的2D/3D图形转化为XAML。或许你希望我能推荐一些书籍,目前我所知的最棒的两本书是Charles Petzold著的Applications = Code + Markup 和Adam Nathan著的Windows Presentation Foundation Unleashed。 XAML XAML是eXtensible Application Markup Language的缩写。你可以将它想成用类似HTML的方式来定义Windows应用程序的界面,不过XAML的功能更强大一些。或许代码狂们会认为XAML不过是一堆CLR对象被序列化后的结果,不过XAML除了可以被逆序列化之外,还比较适合阅读,程序员们可以直接编辑它,图形化的设计器可以方便生成它。包含XAML文件的项目,编译后对应的是BAML,这是二进制表示的XAML,它被当作资源存储在程序exe或dll中,当运行需要时被快速加载到程序中来,BAML比XAML的加载效率要高一些。 学习XAML最好的方式就是通过一些例子,不再絮叨,首先来比较两段代码: HTML 代码片段 <div style="border: solid 5px black; margin: 10px; padding: 5px">  <input type="button" value="Click Me!" /> </div> XAML 代码片段 <Border BorderBrush="Black" BorderThickness="5"......[阅读全文]

posted @ | Feedback (1) |