Windows Presentation Foundation UI 开发十大突破

英文原文地址:http://msdn.microsoft.com/windowsvista/default.aspx?pull=/msdnmag/issues/06/01/WindowsPresentationFoundation/default.aspx


10.强大的图形能力 Advanced Graphics


*增强的绘图能力
xaml可定义画笔

<DrawingBrush Viewbox=”0,0,1,1″ ViewboxUnits=”Absolute”
        Viewport=”0,0,0.07,0.2″ TileMode=”Tile”>
    <DrawingBrush.Drawing>
        <GeometryDrawing Brush=”HorizontalGradient #f000 #0000″>
            <GeometryDrawing.Geometry>
                <RectangleGeometry Rect=”0,0,1,0.6″ />
            </GeometryDrawing.Geometry>
        </GeometryDrawing>
    </DrawingBrush.Drawing>
</DrawingBrush>


用该画笔可以实现蒙板(mask)的遮罩效果


*更少的控件限制
在win32中,如果我们要画一个点,那么就必需指定某一个控件来负责执行画的动作。
而在WPF中,这个动作将不再受限于某一个控件,所有的控件和UI组件将共享窗口,甚至重叠


*分辨率独立性
显示器最高分辨率的提高,使得以前的程序如果在高分辨率的时候界面和字体变得非常小。
WPF中由于每个控件都是独立绘制,所以对UI进行整体的缩放和旋转就变得十分简单。
Interactive Designer中右上角的workspace zoom功能就是很好的例子


*内置的动画和视频支持
<Rectangle Fill=”Blue” Height=”100″>
  <Rectangle.Triggers>
    <EventTrigger
        RoutedEvent=”Rectangle.Loaded”>
      <BeginStoryboard>
        <Storyboard TargetProperty=
            “(Rectangle.Width)”>
          <DoubleAnimation From=”20″ To=”200″
              Duration=”0:0:5″
              RepeatBehavior=”Forever” />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Rectangle.Triggers>
</Rectangle>
这段xaml代码定义了一个5秒内宽度从20到200的矩形的动画。


<MediaElement Name=”myVideo”
    Source=”C:WINDOWSsystem32oobeimages
        intro.wmv”
    Width=”450″ Height=”400″ >

这是一个视频组件,你可以把它放在按钮上或者一个椭圆上,并可以进行任意的缩放,旋转和翻转的操作。


9.绘制对象模型 Drawing Object Model
在win32的开发中,如果图形被其它图形遮盖,当其它图形移开的时候,你需要试用repaint来重新绘制原来在下面的图形。同样,当你需要改变图形的外观,也需要指导windows将相关的区域无效,来初始化一个repaint。

在WPF中这个过程变得非常的简单,你需要做的只是定义好图形的对象就可以了。


8.Rich字符的应用 Rich Application Text
在字符的设置方面Windows应用程序已经远远落后与Web应用程序。
WPF可以让开发人员像写HTML, CSS一样为应用程序定义不同的字符设置
<TextBlock FontFamily=”Calibri” FontSize=”11pt”>
    Hello, <Bold>world!</Bold>
    <Span FontFamily=”Old English Text MT”
        FontSize=”24pt”>This</Span>
    is a
    <Italic>single</Italic>
    <Span FontFamily=”Consolas” Foreground=”Blue”>
    &lt;<Span Foreground=”DarkRed”>TextBlock</Span>/&gt;
    </Span>
    <Hyperlink>element</Hyperlink>.
</TextBlock>

这段代码实现了下面的字符显示样式

WPF还提供了TextFlow控件,它可以整理大量文字的格式,并处理文字与控件混和的格式控制。


7.可变的UI版面 Adaptable UI Layout
这是另外一个Windows App 向 Web App学习的地方,不像现在只要靠一个docking的设置,WPF中的应用程序排版将更像HTML的写法,并将有Grid和Table的版式。
Layout 组件还能进行嵌套和自定义来制作非常复杂的程序版面。


6.更灵活的内容样式 Flexible Content Model
以前一个按钮的内容只能是文本,而在WPF中它可以是任意的内容:图片、绘图,或者有几幅图形的panel,甚至是菜单和输入框。


5.无样式的控件 Lookless Controls
WPF中的控件在定义时是没有样式的,它们通过另外的模板来统一定义。
比如你可以单独定义所有的按钮都使用XP Luna的样式…


4.数据驱动的用户界面 Data-Driven UI
通过data template,可以将数据对象动态的绑定到控件上
<Button x:Name=”myButton”>
    <Button.ContentTemplate>
        <DataTemplate>
            <TextBlock Text=”{Binding Name}” />
        </DataTemplate>
    </Button.ContentTemplate>
</Button>


Data templates就相当于是对象和UI间的桥梁,它使得设计师能灵活的控制数据的呈现方式。而如果要在win32中实现这样的效果则需要开发人员的大量工作。


3.统一的样式 Consistent Styles
这个概念上类似于HTML总的样式定义
<Window.Resources>
    <Style x:Key=”oldeWorlde”>
        <Setter Property=”Control.FontFamily”
            Value=”Old English Text MT” />
        <Setter Property=”Control.FontSize” Value=”18″ />
    </Style>
</Window.Resources>

这是一段style的定义,下面把这个样式应用到button上
<Button Style=”{StaticResource oldeWorlde}”>Click me!</Button>
当用Visual Studio 2005新建一个WPF项目的时候,项目模板会自动包含了MyApp.xaml文件,其中有一段Application.Resource section,在其中定义的style将会被自动的应用到所有窗体。
样式的使用实现了将应用的外观从它的动作和结构中分离出来。


2.触发器 Triggers
触发器是一种对于控件如何对特定条件的反应的定义机制。它能够在style和template中定义。
下面的代码定义了当鼠标移到按钮上时使按钮变成绿色:
<Style TargetType=”{x:Type Button}”>
    <Style.Triggers>
    <Trigger Property=”IsMouseOver” Value=”True”>
        <Setter Property=”Background” Value=”Green” />
    </Trigger>
    </Style.Triggers>
</Style>

Tiggers的另外一个很重要的功能就是加载动画。


1.声明式的编程 Declarative Programming
Declarative Programming大大简化了程序的复杂度,使得不懂编程的设计人员也能容易掌握,它强调的是’what’而不是以前的’how’