`
lovnet
  • 浏览: 6712568 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Windows Presentation Foundation 用户指南

阅读更多

Microsoft Windows Presentation Foundation(以前的代号称为“Avalon”)为构建高度投入,且在视觉效果上与众不同的应用程序提供了一个集成的平台。在本白皮书中,我们将回顾这项新技术的背景和环境,了解 Beta 1 版中提供的主要新功能,并重点介绍一些最重要的突破性更改,这些更改将影响从以前的版本迁移的应用程序。

简介

引用摩尔定律,称处理能力成指数级增长已经成为计算行业中显然令人厌倦的说法。然而,强大的三维图形硬件作为今天最现代化的计算机的标准硬件,除了用于游戏和少数专业人员业务应用程序之外,当前在某种程度上并没有得到充分的利用。Windows Presentation Foundation 作为一个以提供丰富且投入的用户体验为目标的平台,就是为了充分利用这些功能而诞生的。

作为下一代演示子系统,Windows Presentation Foundation 集成了各种输出服务:用户界面、二维和三维图形和图像、基于文档的打印和呈现、语音以及音频和视频服务。通过为所有这些服务提供基于一个框架的托管代码,Windows Presentation Foundation 使提供新的、丰富的用户体验成为可能,这在以前是很难或根本不可能实现的。它的框架是 .NET 开发人员所熟悉的,最终将减少构建数据绑定应用程序所需的代码行数。此外,Windows Presentation Foundation 引入了新的和增强的服务(例如动画),同时还保留了与为 GDI/GDI+ 编写的现有代码的互操作性。

构建 Windows Presentation Foundation 最重要的目标之一就是“集成”。不管目标是二维或三维图形、用户界面元素(例如按钮和文本框)还是媒体,服务(例如动画和数据绑定)的使用方法都完全相同。

Windows Presentation Foundation 应用程序是使用新的、基于矢量的组合引擎来呈现的。它使用硬件加速来呈现 DirectX 图形卡上的进程,还为旧的显示硬件提供了后退软件解决方案。它的协调系统提供了双精度、独立于分辨率的像素寻址,从而为逐渐流行起来的高 dpi 显示提供了支持。

Windows Presentation Foundation 还引入了新的声明编程模型(代号为“XAML”),允许通过属性和逻辑将用户界面指定为对象层次结构。XAML 能够很好地将用户界面设计与代码相分离,使图形设计人员可以创建引人注目的、高度精确的用户界面,使开发人员能够将精力集中在应用程序逻辑上。这个应用程序开发协作模型使开发人员和设计人员能够紧密而有效地协同工作。此外,从工具方面讲,XAML 是很容易创建和使用的,并且可以与使用任何 CLS 兼容的语言(例如 Visual Basic 和 C#)编写的类一起编译到应用程序中。

Windows Presentation Foundation Beta 1

Windows 集成

Windows Presentation Foundation 作为 Windows Vista 操作系统的一部分提供。对于 Windows Vista Beta 1 版,运行 Windows Presentation Foundation 应用程序所需的运行时组件不是默认安装的,但通过桌面快捷方式图标提供了从安装磁盘进行安装的指针。Windows Vista 的安装体验尚未最后确定,在以后的 Beta 版本中可能会有所更改。

通过 WinFX Runtime Components(一个可再分发程序,可从 MSDN 获得),还可以将 Windows Presentation Foundation 安装到 Windows XP 和 Windows Server 2003 上。安装此附加程序包可以为针对 Windows Presentation Foundation 编写的应用程序提供向后兼容性。

新增功能

WinFX Runtime Components Beta 1 版与 5 月份发布的社区技术预览(称为 Beta 1 RC)兼容。这两个版本之间没有突破性的更改,也没有增加新功能,它们之间的主要区别在于增加了一些文档,修复了许多错误,以及为了与 Windows Vista 集成而做的工作。

与其他早期预览版本相比,Beta 1 版中的主要新增功能如下所示:

Express 应用程序。Windows Presentation Foundation 应用程序模型现在支持两种不同的执行模式:单独的可执行程序和 Express 应用程序。单独的应用程序可以从 NavigationApplicationApplication 派生,可以访问授予当前用户上下文的所有权限,并且安装在用户计算机上。Express 应用程序必须从 NavigationApplication 派生,它们驻留在浏览器窗口中,在安全性受限制的部分信任沙箱中运行,并且提供零内存安装模型。

Metro 文档和打印基础结构。在 WinHEC 2005 中,Microsoft 展示了代号为“Metro”的一系列技术。技术的核心是开放式文档格式规范和一系列约定,任何人都可以通过它们来存储、管理内容,以及对内容进行数字签名。该规范还基于 XAML 定义了一种电子文档格式(在 SDK 中称为 Metro Reach)。为应用程序提供的支持性 Metro 技术包括一个查看器和一组 API,前者可用于查看、管理和打印 Metro Reach 文件,后者使 Metro 技术和文档能够与传统的应用程序、Web 和硬件相集成。Metro 在 Windows 中还用作打印机管道和后台打印格式的基础技术。

媒体。此版本中引入了一些新的构造函数,用于显示音频和视频媒体元素并对它们进行基本操作。使用 Windows Presentation Foundation,您可以同时播放多个视频,使一个视频覆盖在另一个视频之上,甚至还可以添加透明混合处理或几何图形以更改视频的显示方式。

语音。现在,语音识别和语音合成均作为 Windows Presentation Foundation 的一部分提供。您可以使用这些类来改善应用程序的可访问性,对这些类进一步自定义以改善对特定领域的行业术语的处理,甚至还可以将预生成和动态生成的音频合成起来以构建更复杂的解决方案。

其他功能。现在,包含了一个 Expander 控件和一个 StatusBar 控件,目的是为了增加 Windows Presentation Foundation 提供的控件的范围和广度。Windows Presentation Foundation 中的版式功能已得到扩展,现在包含对 Adobe CFF 字体的支持。从对象模型的许多方面都进行了性能改进,还计划在以后的版本中做出更多的工作。

WinFX SDK

此版本的发布包含 WinFX SDK 的初始版本,其中包括用于构建 Windows Presentation Foundation 托管应用程序的文档、工具和示例,以及对基于 Windows Communication Foundation(以前称为“Indigo”)构建服务的支持。因为这是一个临时的预测试版本,因此文档可能有一部分未完成,某些示例可能被损坏。如果遇到问题,请查看发行说明中的已知问题。

SDK 中还包括针对 Windows Presentation Foundation 和 Windows Communication Foundation 进行开发的 Visual Studio 2005 工具支持,其中包括用于构建在浏览器内部和外部均可运行的应用程序的已更新模板以及 Windows Presentation Foundation 控件。IntelliSense 是为代码和标记提供的,除了集成的帮助外,还启用了编译和调试支持。同样,发行说明中还提供了有关所需组件的信息和正确的安装顺序,以确保所有选项设置正确。

此版本还包含了 WinFX Runtime Components,其中包括 .NET Framework 2.0 Beta 2 以及 Windows Presentation Foundation 和 Windows Communication Foundation 运行时。您可以使用该运行时对正在开发的应用程序进行内部部署,但请记住,这并不是最终的用户安装体验。

新增功能介绍

本节详细介绍自 March 2005 CTP 以来引入的新增功能。本文提供了如何使用 Beta 1 中的新增功能的示例,还提供了指向 WinFX SDK 文档中的相关部分的链接。

Express 应用程序简介

当前,构建客户端应用程序所面临的最大挑战之一就是部署和管理应用程序的基础结构问题。在业务方案和消费者方案中,应用程序开发人员正在寻找一个能够使应用程序的桌面部署和无缝升级变得更容易的平台。由于具备这些优点,基于 Web 的应用程序已经得到了广泛的应用,但人们还在不断寻找可以更充分地利用本地 PC 的速度和交互性的应用程序。例如,最近 AJAX 应用程序备受关注,但是编译和调试这类应用程序的难度使开发人员不得不继续寻找更好的解决方案。

Express 应用程序出现了,它是构建在 ClickOnce(在 Visual Studio 2005 中引入的)基础之上的模型,为部署到本地缓存的应用程序提供了安全的安全模型,这种模型提供了 Windows Presentation Foundation 的大部分功能,还为维护和升级应用程序提供了便捷的途径。

Express 应用程序在安全性受限制的沙箱中运行,并且驻留在运行在 Internet 区域中的浏览器中。它们是以无提示的方式部署到计算机上的,部署时不会出现交互性安全提示,而且在本地进行缓存。这与常规受信任的应用程序不同,后者通常具有计算机的完全访问权限,在浏览器窗口外部运行并且安装到 \Program Files 目录中而不是进行缓存。

应用程序设计人员应基于他们与基础平台集成的深度选择能够满足自己需要的最佳模型。需要充分利用客户端系统(例如大型存储器、开始菜单显示、脱机功能等)的应用程序应该是完全信任的应用程序。需要更类似 Web 体验的应用程序可能是 Express 应用程序模型的理想选择(例如,可视化、数据驱动的应用程序,以及从服务器上获取数据的交互性)。下列流程图重点介绍了主要的模型选择:


1:选择应用程序模型

要创建 Express 应用程序,最简单的方法是使用 Visual Studio 中内置的 Express 应用程序模板。这将基于 NavigationApplication 对象创建项目。此模板包含 .csproj 或 .vbproject 文件中的许多注释项目设置,这些项目设置将应用程序设置为在 Internet 区域中运行而不进行安装,在浏览器中执行,并选择应用程序的清单 .xapp 扩展名。有关详细信息,可以从文档中的“基于 XAML 的 Avalon Express 应用程序的示例项目文件”主题下找到。

开发 Express 应用程序的方法与开发其他应用程序相同,但某些功能在此环境中不可用。例如,您不能显示单独的窗口,不能使用为了使用 Windows Communication Foundation (Indigo) 而构建的服务(尽管可以使用现有的 ASMX 客户端模型),并且只能写入文件系统的有限专用区域。请注意,当前 Beta 1 版中的 Express 沙箱不完整。为了与 1.0 版之前的 Windows Presentation Foundation 一起使用,将启用某些新的应用程序方案,包括创建流文档的功能。

构建 Express 应用程序时,将创建一个 .xapp 清单文件,该文件只需双击就可以从本地计算机上直接执行。但是,您更可能将此文件与应用程序可执行文件、清单、相关 DLL 以及可选的调试符号(.pdb 文件)一起部署到 Web 服务器上。最后请注意,如果您计划将 Express 应用程序部署到 Windows Server 2003 计算机上,则需要手动向(安全)默认配置中添加一些 MIME 类型和扩展名处理程序,这样才能成功部署 Express 应用程序。有关详细信息,可以从文档中的“配置 IIS 以部署 Avalon 应用程序”主题下找到。

Metro 简介



2a 2b:安装和运行 Avalon Express 应用程序

具有 Metro 的文档

在 WinHEC 2005 年独立硬件供应商大会上,Microsoft 宣布了为构建集成的文档生命周期应用程序所做出的主要新贡献。Metro 是用于将文档工作流生命周期从屏幕到打印机进行彻底改革的一系列技术。Metro 为集成文档生命周期组件以及在组织内传输内容提供了一个通用的基础结构。

Metro 包括以下内容:

一种开放式文档格式,它包含两部分:1) 一个基于 ZIP 压缩文件格式的容器,它为存储内容以及与内容相关的权限管理和数字签名元数据提供一致的方法;2) 一个基于 XML 的电子文档定义,称为 Metro Reach 软件包。

一组开发人员 API,这些 API 与 Windows Presentation Foundation 相集成,使文档方案能够与 Web 和传统的应用程序无缝集成。

一个功能丰富的文档查看器,可用于查看、管理和打印 Metro Reach 文件。该查看器是作为 Internet Explorer 的浏览器插件实现的。

一个新的打印管道(可以直接将 Metro 作为后台打印格式进行集成)和一种新的打印机页面描述语言(可以提高打印的质量和性能)。

Metro 容器是一种机制,使任何应用程序的数据文件都能通过一种通用的方式进行管理、共享和验证。Metro 提供了一组约定,ISV 可以使用这些约定对内容进行打包,在不同的数据文件之间应用权限管理、数字签名和元数据。

Metro Reach 软件包明确描述了文档的外观,并说明了应如何将文档中的所有资源打包才能将其用于任何平台。Metro Reach 很容易创建、修改和呈现,因为它使用公开的技术。具体来说,它使用 XML 说明应如何呈现文档,使用公开的字体和图像指定资源,并说明应如何使用 ZIP 进行打包。

从开发人员的角度来看,Metro 和 Windows Presentation Foundation 是互补的技术。Metro 是新的 Windows Presentation Foundation 显示模型的子集,因此,Metro Reach 文档是显示基于 WinFX 的应用程序的内容的理想方法。从托管 WinFX 应用程序和非托管 Win32 应用程序中均可使用 Metro Reach 文档。

最后,Metro 打印管道将通过打印机改善所呈现的输出的质量。以图形为中心的 ISV 可以添加高级图形效果(例如,柔和阴影、反射高光、渐变和透明),使图形的外观和输出现代化。现在,对 Windows 中的某些要求的本地支持是有限的,这通常导致显示的输出和打印的输出之间存在差异。Windows Presentation Foundation 在本地将数据输出为 Windows Vista 后台打印设备可以直接解释的 Metro Reach 文档,从而在屏幕效果和打印效果之间获得了非常高的保真度,满足了最复杂的图形要求。

Metro 将与 Windows Presentation Foundation 的其他部分一起包含在 Windows Vista 中。请访问 WHDC Metro 站点以获取最新的 Metro 规范。在今年九月在洛杉矶举办的 PDC 2005 上,将从软件开发的角度详细讨论 Metro。

媒体

Windows Presentation Foundation 支持将音频和视频作为集成元素包含在布局中。对于此 Beta 1 版,我们启用了一组功能,允许开发人员将媒体包含在他们的应用程序中,进行简单的一次播放。这些功能包括:

合成视频

.WMV 和 .WMA 文件的音频/视频播放

MediaElement

可以从代码和标记中使用

可以在面板或控件中使用

可以对其应用 ClipOpacityTransformsStretch 属性

可以在动画中使用

MediaTimelineMediaClock 类,对视频进行有限的(播放/暂停/停止)控制

有限的多视频支持

在当前版本和 Beta 2 版之间,将在媒体方面做出更多努力,以满足更复杂的要求并进一步完善媒体。能够体现此版本中的局限性的一个例子就是,当一段媒体到达结尾时,无法自动循环,也无法在媒体中快退或快进。

有关如何在 Windows Presentation Foundation 中处理媒体的示例,请参阅以下快照。请注意使用透明混合处理技术将最上面的视频与基础快照合成的方式;还要注意,它被修剪为一个椭圆形。


3Windows Presentation Foundation 媒体支持

这是使用以下代码创建的:

<Grid xmlns="http://schemas.microsoft.com/winfx/avalon/2005" > 
<MediaElement Name="myVideo" Source="\media\The_Magic_of_Flight_720.wmv" 
Stretch="Fill" /> 
<MediaElement Name="myVideo" Source="\media\Start Something.wmv"  
Width="480" Height="320" Opacity="0.7"> 
<MediaElement.Clip> 
<EllipseGeometry Center="200, 100" RadiusX="150" RadiusY="100" /> 
</MediaElement.Clip> 
 
</MediaElement> 
 
<TextBlock FontFamily="Global User Interface" FontSize="84pt"  
Foreground="#ffff00"  
TextAlignment="center" VerticalAlignment="bottom"  
RenderTransform="rotate -5" Opacity=".35"> 
Windows Presentation Foundation Media Support 
</TextBlock> 
 
</Grid>

通过使用较低级别的 Visual API,您可以借助 VideoDrawing 类将视频用作 Drawing 对象。

请注意,视频在 Windows Vista Beta 1 中是不可操作的,但在以后的版本中将是可操作的。

语音

System.Speech 命名空间允许在应用程序中合并语音识别和语音合成。语音识别可用于允许使用口语命令操作您的 Windows Presentation Foundation 应用程序;语音合成使 Windows Presentation Foundation 应用程序能够通过音频子系统“阅读”某些文本。

语音识别

支持语音识别的主要类包括:

DesktopRecognizer:提取由桌面上的应用程序共享的识别器

SpeechRecognizer:提取应用程序专用的识别引擎

RecognitionResult:检查识别器返回的文本和语义

SrgsDocument:用于构建识别语法(识别器应在您的应用程序中侦听哪些短语的规则)

例如,要将包含应用程序命令的语法加载到共享的桌面识别器中,需要编写以下代码:

DesktopRecognizer desktopRecognizer = new DesktopRecognizer(); 
desktopRecognizer.LoadGrammar(new Grammar(new Uri(grammarPath))); 
desktopRecognizer.SpeechRecognized += delegate(object sender, RecognitionEventArgs e) 
    { 
// 获得识别时进行适当的处理 
// Console.WriteLine("User said {0}", e.Result.Text); 
    };

要使用 Windows Presentation Foundation 的语音识别服务,您还需要安装语音识别引擎,但请记住,除了 Windows XP Tablet PC Edition 外,此引擎并不是与其他基础级别的操作系统一起分发的。最新版本的 Microsoft Office 也包含了语音识别引擎,您始终可以从以下位置的 Microsoft Speech API 网站下载引擎:http://www.microsoft.com/speech/download/sdk51/。最后请记住,语音识别引擎是特定于语言的,并不是对所有支持的 Windows 语言都可用。

语音合成

语音合成的主要类包括:

SpeechSynthesizer:提取合成引擎

PromptBuilder:构建包含重读、音量、预先录制的声音和其他特征的提示字符串。

例如,要使您的应用程序说出“hello world”,只需编写以下代码:

SpeechSynthesizer synth = new SpeechSynthesizer(); 
synth.Speak("Hello world!");

通过使用 PromptBuilder,可以很容易地将它与波形文件合并起来,例如:

PromptBuilder builder = new PromptBuilder(); 
builder.AddAudio (new Uri (@"file://\windows\media\ding.wav")); 
builder.AddText("Hello world!"); 
 
SpeechSynthesizer synth = new SpeechSynthesizer(); 
synth.Speak(builder);

与语音识别不同的是,与 WinFX Runtime Components 兼容的所有 Windows 版本(Windows XP、Windows Server 2003 和 Windows Vista)都包含语音合成引擎。

最后请注意,此处介绍的语音服务使用 W3C 标准格式的识别语法 (SRGS) 和合成 (SSML)。

新增控件

Expander 是一个新增控件,您可以在希望能够根据需要展开和折叠数据的任何位置使用它。默认情况下,它的用户体验与 Windows XP 中的资源管理器窗口左侧显示的任务列表类似,但在您希望隐藏然后显示内容的情况下,您几乎可以出于任何目的而改变它的样式。


4Expander 控件

要使用 Expander 控件,只需为标题区域创建一个 Expander.Header 区域,然后在 Expander 的正文中添加一些内容(可以有选择地使用 ScrollViewer 以防止扩展后的区域过大),如下所示:

<StackPanel xmlns="http://schemas.microsoft.com/winfx/avalon/2005" 
xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" > 
<StackPanel.Resources> 
<XmlDataSource x:Key="BookData" XPath="/Books"> 
<Books xmlns=""> 
<Book ISBN="0-2010-3812-9" Stock="in"> 
<Title>Surreal Numbers</Title> 
</Book> 
<Book ISBN="1-5758-6327-8" Stock="in"> 
<Title>Things a Computer Scientist Rarely Talks About</Title> 
</Book> 
<Book ISBN="0-4650-6710-7" Stock="in"> 
<Title>The Design of Everyday Things</Title> 
</Book> 
<Book ISBN="0-0609-2656-2" Stock="out"> 
<Title>The Lost Heart of Asia</Title> 
</Book> 
</Books> 
</XmlDataSource> 
<Style TargetType="{x:Type ListBox}"> 
<Setter Property="BorderBrush" Value="Transparent" /> 
</Style> 
<Style TargetType="{x:Type ListBoxItem}"> 
<Setter Property="Margin" Value="1" /> 
<Setter Property="Cursor" Value="Hand" /> 
</Style> 
</StackPanel.Resources> 
<Expander Margin="0,0,0,10" DockPanel.Dock="Top" Background="Transparent"> 
<Expander.Header> 
<TextBlock Margin="10,0,0,0" FontFamily="Tahoma" FontWeight="Bold"> 
Books 
</TextBlock> 
</Expander.Header> 
<ScrollViewer VerticalScrollBarVisibility="Auto" 
HorizontalScrollBarVisibility="Disabled"> 
<ListBox FontFamily="Tahoma"  
DataContext="{Binding Source={StaticResource BookData}, 
XPath=/Books/Book/Title}" 
ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True"  /> 
</ScrollViewer> 
</Expander> 
</StackPanel>

StatusBar 控件通过一系列面板提供任意状态信息,通常固定在窗口的底部。它是相当容易使用的控件:只需在 StatusBar.Items 集合中为状态栏的每个部分创建一个 StatusBarItemStatusBarItems 可以包含其他复杂的元素,例如 StackPanel,如下所示:

<Window xmlns="http://schemas.microsoft.com/winfx/avalon/2005"> 
<DockPanel> 
 
<StatusBar DockPanel.Dock="Bottom"> 
<StatusBar.Items> 
<StatusBarItem> 
<TextBlock Name="Info"> 
Welcome to the new features of  
<Bold>Windows Presentation Foundation</Bold>! 
</TextBlock> 
</StatusBarItem> 
<StatusBarItem Name="WordButtons"> 
<StackPanel Orientation="Horizontal" Margin="20 0 0 0"> 
<Button Name="REC">REC</Button> 
<Button Name="TRK">TRK</Button> 
<Button Name="EXT">EXT</Button> 
<Button Name="OVR">OVR</Button> 
</StackPanel> 
</StatusBarItem> 
<StatusBarItem Name="General" HorizontalAlignment="Right"> 
This item is right-aligned. 
</StatusBarItem> 
</StatusBar.Items> 
</StatusBar> 
<Label /> 
</DockPanel> 
</Window>

还请注意,Toolbar 控件现已扩展为支持溢出(与 Office 2003 中的方式相同),并且使用 Expander 以允许选择溢出的工具栏按钮。对菜单系统进行的其他改进还有很多,并且在 Windows Presentation Foundation 中增加了对 Windows XP 默认主题的银色和橄榄色版本的支持。

新增编码解码器支持

使用 Windows Presentation Foundation,可以很容易地将图像与图形、媒体、文本和应用程序 UI 相集成。构建在 Windows Presentation Foundation 基础之上的应用程序还能够以新的或专用的图像格式识别、显示、操作和保存图像,而无需重新编译或重新分发应用程序。只要应用程序使用 Windows Presentation Foundation 图像处理 API,基础编码解码器平台就能够为在运行时为其安装了支持的任何图像格式自动找到并调用适当的编码解码器。

图像处理编码解码器部分增加了许多功能和大量附加文档。当前的基本平台功能包括针对常见格式(例如 JPEG、PNG、TIFF 和 GIF)的内置编码解码器。该平台还提供了元数据读取器和编写器(因此,例如,您可以编辑包含在 JPEG 文件中的 EXIF 元数据,并重新保存已更新的版本)。Avalon 还提供了在不同的图形格式之间进行转换的像素格式转换器,并为这三个区域中的每个区域提供了一个可扩展管道,允许您构建自己的自定义转换器、元数据读取器或编码解码器。

在 Post-Beta 1 版中,Windows Presentation Foundation 还将增加对可扩展图像效果管道的支持,使应用程序开发人员能够将模糊或阴影等效果动态添加到图形图像中。同样,此模型将是可扩展的,以允许包含自定义图像效果。

版式

此版本在版式方面增加的一项新功能就是 Adobe CFF 支持。这是对 OpenType 的扩展,允许支持更多华丽的复杂字体,还允许图形设计人员访问字样中显示的所有自由连体字和上下文连体字。以下图形示例显示了 Windows Presentation Foundation 中的文本支持功能。此字样为 Adobe Bickham Script Pro,通过使用字体文件中提供的自由连体字和上下文连体字和格式化变体符号,您可以获得在当前的 Windows 中很难实现的动人效果。


5:使用 Windows Presentation Foundation 中的 Adobe CFF 支持

功能和 API 更改

列举此版本中的每一项 API 更改超出了本文的讨论范围,但在本节中,我们将简要概述主要的概念和语法更改,这些更改将影响试图将代码从以前的 March CTP 版本迁移到 Beta 1 的开发人员。

样式

此版本对 Avalon 中的样式模型进行了重构。样式中不再包含控件实例,而是包含属性设置器和获取器。新格式稍微有些繁琐,但在某种程度上提供了更大的灵活性。

以下示例显示了设置样式的新语法:

<Page.Resources> 
<Style TargetType="{x:Type Paragraph}"> 
<Setter Property="FontFamily" Value="Palatino Linotype" /> 
<Setter Property="FontSize" Value="16pt" /> 
<Setter Property="Margin" Value=".25in" /> 
</Style> 
</Page.Resources>

数据模板

在以前的版本中,Windows Presentation Foundation 区分逻辑元素树和“可视化树”,后者控制逻辑树的表示。可视化树是作为样式的一部分嵌入的。现在,样式和可视化树已从概念上区分开来;您可以将模板嵌入父控件,也可以作为资源词典的一部分嵌入。

以下示例并列显示了新语法和旧语法:

旧语法(March CTP 语法) 新语法(Beta 1 语法)

<Page.Resources> <Style x:Key="MessageTemplate"> <Style.VisualTree> <StackPanel> <TextBlock TextContent="{Bind Path=From}" /> <TextBlock TextContent="{Bind Path=Body}" /> </StackPanel> </Style.VisualTree> </Style> </Page.Resources> ... <ListBox ItemsSource="{StaticResource MessageData}" ItemStyle="{StaticResource MessageTemplate}" />

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics