1.4.1.2 用 XAML 描述用户界面

728 篇文章 1 订阅
349 篇文章 0 订阅

1.4.1.2 用 XAML 描述用户界面

 

Windows 表现层基础库(WindowsPresentation Foundation,WPF)是用于创建用户界面的 .NET 库,这个库支持声明式编程风格,它将描述用户界面部分与实现命令式程序逻辑的部分分隔开来。使用Windows 表现层基础库的最好办法,是使程序逻辑尽可能小,并尽可能多地以声明式方式创建。

声明式的描述用树状结构表示,其构成的每个对象表示图形用户界面的元素。它可以用 C# 创建,但Windows 表现层基础库还提供更好的方法,使用基于 XML 的语言,称为 XAML。不过,我们会看到在 XAML 和 LINQ 之间存在着很多的相似性。清单 1.5 是 XAML 代码与使用命令式 Windows Forms 库代码的对比,它们实现同样的功能。

 

Listing 1.5 Creating a UI using thedeclarative and imperative styles (XAML and C#)

 

<!-- Declarative userinterface in WPF and XAML -->

<CanvasBackground="Black">

  <Ellipsex:Name="greenEllipse"Width="75"Height="75"

  Canvas.Left="0"Canvas.Top="0"Fill="LightGreen" />

</Canvas>

 

//Imperative user interface using Windows Forms

protected override voidOnPaint(PaintEventArgs e) {

  e.Graphics.FillRectangle(Brushes.Black,ClientRectangle);

  e.Graphics.FillEllipse(Brushes.LightGreen, 0,0, 75, 75);

}

 

 

确定是什么使第一段代码段更具声明性并不困难。XAML 代码通过组合基元,并指定其属性来描述用户界面,整个代码就是一个表达式,它创建一个黑色画布,包含绿色的椭圆。命令式版本说明了如何绘制用户界面,通过语句序列指定应该执行哪些操作,才能获得所需的图形用户界面。这个示例演示了了两者的区别,声明式风格只要说明干“什么”,而命令式风格必须指定“怎么”干。

在声明性的版本中,我们不需要更多了解底层的技术细节。如果你看这段代码,并不需要知道WPF 是如何表示,并绘制图形用户界面的。而使用 Windows Forms 的代码,可以看到所有的技术细节,(比如,画笔的表示和绘图的顺序)。在清单 1.5 中,XAML 和绘图代码的对应关系是清楚的,我们可以用 WPF 和 XAML 来描述更复杂的程序。让我们看一个示例:

 

<DoubleAnimation

  Storyboard.TargetName="greenEllipse"

  Storyboard.TargetProperty="(Canvas.Left)"

  From="0.0"To="100.0"Duration="0:0:5" />

 

这是一个表达式,创建了动画,改变椭圆的 Left 属性(通过名字greenEllipse 指定),其值在 5 秒内从 0 到 100。代码是用 XAML 实现的,我们也可以用 C# 来写,通过显式构造对象树。DoubleAnimation 是一个类,因此可以指定其属性。但是,用XAML 语言来写更具声明性。但是,不管哪种情况,代码能具有声明性,都要感谢 WPF。用传统的命令式代码实现动画相当复杂,必须创建一个计时器,并注册事件处理程序,每隔几毫秒调用一次,来计算椭圆的新位置。

 

用.NET 进行声明式编程

 

WPF 和 LINQ 是两个具有声明式风格编程的主流技术,当然还有其他的。LINQ 的目标是简化处理数据的一种通用语言,它借鉴了很多具有声明风格的数据处理语言的思想,例如,在SQL 或 XSLT 中也可以发现声明式的方法。

使用声明式风格的另一领域是在 C# 或 VB.NET 中使用 .NET 特性。特性是用来注解类或其成员的一种方法,指定其如何能在特定情况下使用。比如,在设计器中编辑图形用户界面控件,这就是声明式的,因为,当我们正在处理控制时,说明希望从设计器得到什么,而不是通过写代码,以命令方式来配置设计器的。

 

到目前为止,我们已经看到了基于声明式风格的几种技术,知道它们能使问题更容易解决。你可能会问自己,我们如何用它来解决自己的问题,在下一节,我们将简单介绍一下第十五章中的一个示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值