Windows Presentation Foundation Beta 1 版本的体系结构概述

 

Tim Sneath
Microsoft Corporation

2005 年 8 月

适用于:
   WinFX 运行时组件 Beta 1 版本 (单击下载)

总结:本文重点介绍Windows Presentation Foundation (“Avalon”) (下一代 Windows 演示图形子系统)的 Beta 1 版本。 它简要概述了该平台,并探讨了此版本中从以前版本添加的新功能。 ) (15 个打印页

目录

简介
Windows Presentation Foundation Beta 1
   Windows 集成
   新增功能
   WinFX SDK
探索新功能
   “Express”应用程序简介
介绍“Metro”
   媒体
   语音
   新建控件
   新的编解码器支持
   版式
功能和 API 更改
   样式
   数据模板
   可更改和冻结
   删除 SqlDataSource
   API 更改
结论

Microsoft Windows Presentation Foundation (以前称为代号“Avalon”) 提供了一个集成平台,用于构建高度沉浸式、视觉上不同的应用程序。 在本白皮书中,我们将回顾这一新技术的背景和上下文,查看 Beta 1 时间范围内提供的主要新功能,并重点介绍一些将影响从以前版本移植的应用程序的最重大中断性变更。

简介

摩尔的处理能力指数增长定律的调用已成为计算行业明显令人厌倦的隐喻。 然而,目前大多数现代计算机中标准的强大 3-D 图形硬件在游戏和一些专业业务应用程序之外使用得有些不足。 Windows Presentation Foundation旨在充分利用这些功能作为构建丰富沉浸式用户体验的平台。

Windows Presentation Foundation是下一代演示子系统,它统一了一系列输出服务:用户界面、二维和三维绘图和图像处理、基于文档的打印和渲染、语音以及音频和视频服务。 通过为所有这些服务提供基于托管代码的单个框架,Windows Presentation Foundation可以生成迄今为止难以或不可能的全新丰富用户体验。 对于 .NET 开发人员来说,其框架是熟悉的,最终将减少生成数据绑定应用程序所需的代码行数。 此外,Windows Presentation Foundation引入了新的和增强的服务(如动画),同时保留了与为 GDI/GDI+ 编写的现有代码的互操作性。

构建Windows Presentation Foundation的首要目标之一是集成。 无论目标是 2D 还是 3D 图形、用户界面元素(如按钮和文本框,甚至是媒体),动画和数据绑定等服务的使用方式完全相同。

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 版本可能会更改。

Windows Presentation Foundation也可通过 WinFX 运行时组件(可从 MSDN 获取的可再发行组件)在 Windows XP 和 Windows Server 2003 上安装。 安装此加载项包可为为Windows Presentation Foundation编写的应用程序提供向后兼容性。

新增功能

WinFX 运行时组件的 Beta 1 版本与 5 月发布的社区技术预览版兼容, (称为 Beta 1 RC) 。 两个版本或新功能之间没有中断性变更;这两个版本之间的主要区别在于额外的文档、许多 bug 修复,并且致力于与 Windows Vista 集成。

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

  • “Express”应用程序。 Windows Presentation Foundation应用程序模型现在支持两种不同的执行模式:独立可执行文件和“Express”应用程序。 独立应用程序可以从 NavigationApplication应用程序派生,有权访问授予当前用户上下文的所有权限,并安装到用户的计算机。 Express 应用程序必须派生自 NavigationApplication,托管在浏览器窗口中,在受安全约束的部分信任沙盒中运行,并提供零占用空间的安装模型。
  • “Metro”文档和打印基础结构。 在2005年 WinHEC 上,Microsoft 推出了一套代号为“Metro”的技术。 其核心是开放文档格式的规范和一组任何人都可以用于存储、管理和数字签名内容的约定。 该规范还基于 XAML 在适用于电子纸张的 SDK) 中定义了名为 Metro Reach 的格式 (。 支持适用于应用程序的 Metro 技术包括查看、管理和打印 Metro Reach 文件的查看器,以及一组可将 Metro 技术和文档与传统应用程序、Web 和硬件集成的 API。 在 Windows 中,Metro 还用作打印机管道和后台打印格式的基础技术。
  • 媒体。 在此版本中,引入了新的构造,以启用音频和视频媒体元素的显示和基本操作。 使用 Windows Presentation Foundation可以同时播放多个视频,将一个视频覆盖在另一个视频之上,甚至可以添加 alpha 混合或几何图形来更改视频的显示方式。
  • 语音。 语音识别和语音合成现在都作为Windows Presentation Foundation的一部分包含在内。 可以使用这些类改进应用程序的可访问性,进一步自定义它们以改进对特定于域的行话的处理,甚至可以将预生成的音频和动态生成的音频拼接在一起,以生成更复杂的解决方案。
  • 其他功能。 现在包含扩展器控件和状态栏控件,作为增加随Windows Presentation Foundation提供的控件的范围和广度的重点的一部分。 Windows Presentation Foundation中的版式功能已扩展,现在包括对 Adobe CFF 字体的支持。 对象模型在很多方面都看到了性能改进,并计划为将来的版本做进一步的工作。

WinFX SDK

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

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

此版本还包括 WinFX 运行时组件,其中包括 .NET Framework 2.0 Beta 2 以及 Windows Presentation Foundation 和 Windows Communication Foundation 运行时。 可以使用运行时对开发中的应用程序进行内部部署;请记住,最终用户设置体验不是最终的。

探索新功能

本部分更详细地介绍自 2005 年 3 月 CTP 以来引入的新功能。 本文档提供有关如何使用 Beta 1 中提供的新功能的示例,以及 WinFX SDK 文档相关部分的链接。

“Express”应用程序简介

当今构建客户端应用程序的最大挑战之一是部署和管理应用程序的基础结构问题。 在业务和使用者方案中,应用程序开发人员正在寻找一个平台,该平台可以更轻松地将应用程序部署到桌面并无缝升级它们。 基于 Web 的应用程序的采用在很大程度上是由于这些好处,但人们也越来越多地寻找更充分地利用本地电脑的速度和交互性的应用程序。 例如,AJAX 应用程序最近引起了人们的注意,但生成和调试此类应用程序的难度使得开发人员继续寻找更好的解决方案。

输入“Express”应用程序,这是一个基于 Visual Studio 2005) 引入的 ClickOnce (构建的模型,并为部署到本地缓存的应用程序提供安全安全模型,该模型提供Windows Presentation Foundation的大部分功能,并结合一个用于维护和升级应用程序的轻型路径。

Express 应用程序在受安全约束的沙盒中运行,托管在浏览器中,在 Internet 区域中运行。 它们在没有交互式安全提示的情况下以无提示方式部署到计算机,并在本地缓存。 这与通常对计算机具有完全访问权限、在浏览器窗口外运行、安装到 \Program Files 目录而不是缓存的常规受信任应用程序形成鲜明对比。

应用程序设计人员应根据与基础平台的集成深度,选择满足其需求的最佳模型。 需要充分利用客户端系统(例如大型存储、开始菜单状态、脱机功能等)的应用程序应该是完全信任的应用程序。 需要更类似 Web 体验的应用程序可能是 Express 应用程序模型 (,例如可视化效果、数据驱动应用以及数据来自服务器) 的交互性。 以下流程图突出显示了主要模型选项:

Aa480177.hgtomayavalonctp1 (en-us,MSDN.10) .gif

图 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 包的电子纸的定义。
  • 一组与 Windows Presentation Foundation 集成的开发人员 API,允许将文档方案无缝集成到 Web 和传统应用程序中。
  • 用于查看、管理和打印 Metro Reach 文件的丰富文档查看器。 查看器作为 Internet Explorer 的浏览器插件实现。
  • 将 Metro 作为后台打印格式直接集成的新打印管道,以及可实现更高质量和更高性能打印的新打印机页面描述语言。

Metro 容器是一种以通用方式管理、共享和验证任何应用程序的数据文件的机制。 Metro 提供了一组约定,ISV 可用于内容打包和跨不同数据文件应用权限管理、数字签名和元数据。

Metro Reach 包明确描述了文档的外观,并描述了如何打包文档中的所有资源,以便可在任何平台上使用。 Metro Reach 易于创建、修改和呈现,因为它使用公开可用的技术。 具体而言,它使用 XML 描述文档的呈现方式,使用公开可用的字体和图像指定资源,并描述如何使用 ZIP 打包文档。

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

最后,Metro 打印管道将提高通过打印机呈现的输出的质量。 以图形为中心的 ISV 正在添加高级图形效果,如柔和阴影、高光、渐变和透明度,以使其外观和输出现代化。 目前 Windows 中对其中某些要求的本机支持是有限的,这通常会导致显示输出和打印输出之间存在差异。 Windows Presentation Foundation将以本机方式输出数据作为 Metro Reach 文档,可由 Windows Vista 后台处理程序直接解释,从而为最复杂的图形需求提供非常高的屏幕到打印保真度。

地铁将连同Windows Presentation Foundation的其余部分一起包含在 Windows Vista 中。 请访问 WHDC Metro 站点,了解当前的 Metro 规范。 地铁将于今年9月在洛杉矶的PDC 2005上从软件开发角度进行详细介绍。

媒体

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

  • 复合视频
  • 的音频/视频播放。WMV 和 。WMA 文件
  • MediaElement
    • 可从代码和标记使用
    • 可在面板或控件中使用的
    • 可以应用 剪辑不透明度转换拉伸 属性
    • 可在动画中使用的
  • MediaTimelineMediaClock 类, (播放/暂停/停止) 视频控制
  • 有限的多视频支持

从现在到 Beta 2 版本,将进一步进行媒体工作,以添加对更复杂的要求和更好的改进的支持。 此版本中限制的一个示例是,在媒体到达末尾时,无法自动循环,也无法通过媒体自动回退或转发。

例如,只需使用Windows Presentation Foundation中的媒体即可执行哪些操作,检查以下屏幕截图。 请注意,将最上面的视频与 alpha 混合组合到基础屏幕截图的方式;另请注意,它被剪裁为椭圆形几何图形。

单击此处查看较大图像

图 3. Windows Presentation Foundation媒体支持 (单击较大的图像)

这是使用下面看到的代码创建的:

<Grid xmlns="https://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>

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

应注意的是,视频在 Windows Vista Beta 1 中不可运行,但将在将来的版本中启用。

语音

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

语音识别

支持语音识别main类包括:

  • DesktopRecognizer:抽象化桌面上的应用共享的识别器
  • SpeechRecognizer:抽象识别引擎供应用独占使用
  • RecognitionResult:检查识别器返回的文本和语义
  • SrgsDocument:用于生成识别语法 (识别器应在应用中侦听哪些短语的规则)

例如,将包含应用的命令的语法加载到共享桌面识别器中:

DesktopRecognizer desktopRecognizer = new DesktopRecognizer();
desktopRecognizer.LoadGrammar(new Grammar(new Uri(grammarPath)));
desktopRecognizer.SpeechRecognized += delegate(object sender, RecognitionEventArgs e)
    {
        // Do appropriate handling when we get a recognition
        // Console.WriteLine("User said {0}", e.Result.Text);
    };

若要使用Windows Presentation Foundation中的语音识别服务,你还需要安装语音识别引擎,但请记住,除了 Windows XP Tablet PC Edition 之外,这不会随基础级 OS 一起分发。 Microsoft Office 的最新版本还包括语音识别引擎,并且你始终可以从以下位置的 Microsoft 语音 API 网站下载引擎: https://www.microsoft.com/speech/download/sdk51/。 最后,请记住,语音识别引擎特定于语言,并非适用于所有受支持的 Windows 语言。

语音合成

语音合成main类包括:

  • 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);

与语音识别相比,与 Windows XP、Windows Server 2003 和 Windows Vista () WinFX 运行时组件兼容的所有 Windows 版本都包括语音合成引擎。

总之,应注意,此处所述的语音服务使用 W3C 标准格式进行识别语法 (SRGS) 和合成 (SSML) 。

新控件

扩展器 是一种新控件,无论你希望能够折叠和按需扩展某些数据,都可以使用它。 默认情况下,它的用户体验模仿 Windows XP 中资源管理器窗口左侧存在的任务列表,但你可以将其重设为几乎任何要隐藏然后显示内容的目的。

Aa480177.hgtomayavalonctp4 (en-us,MSDN.10) .gif

图 4。 Expander 控件

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

<StackPanel xmlns="https://schemas.microsoft.com/winfx/avalon/2005"
            xmlns:x="https://schemas.microsoft.com/winfx/xaml/2005" >
   <StackPanel.Resources>
      <XmlDataSource x:Key="BookData" XPath="/Books">
         <Books >
            <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="https://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>

另请注意, 工具栏 控件已扩展为支持溢出 (,其方式与 Office 2003) 相同,扩展器用于启用溢出工具栏按钮的选择。 对菜单系统进行了许多其他改进,并且已为 windows XP 默认主题的银色和橄榄版Windows Presentation Foundation添加了支持。

新的编解码器支持

使用 Windows Presentation Foundation,图像可以轻松地与图形、媒体、文本和应用程序 UI 集成。 基于Windows Presentation Foundation构建的应用程序还可以以新的或专有的图像格式识别、显示、操作和保存图像,而无需重新编译或重新分发其应用程序。 只要应用程序使用 Windows Presentation Foundation 映像 API,基础编解码器平台就会自动发现并在运行时为其安装了支持的任何图像格式调用相应的编解码器。

图像处理编解码器部分添加了一些新增功能和大量额外文档。 当前的基本平台功能包括用于常见格式(如 JPEG、PNG、TIFF 和 GIF)的内置编解码器。 该平台还提供元数据读取器和编写器 (,例如,可以编辑 JPEG 文件中包含的 EXIF 元数据,并重新保存) 更新的版本。 Avalon 还提供不同图形格式之间的像素格式转换器,并为这三个区域中的每个区域提供可扩展的管道,使你能够生成自己的自定义转换器、元数据读取器或编解码器。

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

版式

此版本版式中添加的一项新功能是 Adobe CFF 支持。 OpenType 的此扩展允许支持更华丽和复杂的字体,并允许图形设计人员访问字体中存在的全范围任意连字和上下文连字。 下图示例演示了Windows Presentation Foundation中的文本支持功能。 此字样是 Adobe Bickham Script Pro,通过使用字体文件中提供的任意连字和上下文连字以及样式变体字形,可以实现目前在 Windows 上难以实现的令人印象深刻的效果。

Aa480177.hgtomayavalonctp5 (en-us,MSDN.10) .gif

图 5。 从 Windows Presentation Foundation 内部使用 Adobe CFF 支持

功能和 API 更改

枚举此版本中的每个 API 更改超出了本文档的范围;但是,在本部分中,我们将提供有关主要概念和语法更改的简要指南,这些更改将影响尝试将代码从上一年 3 月 CTP 版本移植到 Beta 1 位的开发人员。

样式

在此版本中,Avalon 中的样式模型已重构。 样式中不再包含控件的实例,而是包含属性资源库和 getter。 新格式稍微更详细一些,但提供了更大的灵活性。

以下示例演示用于设置样式的新语法:

   <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区分逻辑元素树和可视化树,后者控制逻辑树的表示形式。 可视化树作为样式的一部分嵌入。 现在,样式和可视化树已作为概念分离:可以改为将模板嵌入父控件中或作为资源字典的一部分。

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

旧 (3 月 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}" />
<ListBox 
ItemsSource="{StaticResource 
MessageData}">
   <ListBox.ItemTemplate>
      <DataTemplate>
         <StackPanel>
            <TextBlock 
          TextContent="{Binding 
Path=From}" />
            <TextBlock 
          TextContent="{Binding 
Path=Body}" />
         </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

可更改和冻结

在以前版本的 Windows Presentation Foundation中,许多常见类型派生自名为 Changeable 的基类。 引入了可更改模型,允许使用不可变类型,就像使用可变类型一样,基类在后台根据需要创建对象的克隆。 例如,应用程序可以创建画笔对象,将其颜色设置为红色,然后使用它;当他们对对象进行更改时,仅在该对象的 用法 上克隆了该对象。 具有不可变值是创建高性能系统的一个重要部分:可变对象所需的簿记工作会施加不可接受的负载,但创建可变副本对于编程操作和动画也很重要。 可变模式提供了一个支持这两个要求的模型。

在此版本中,我们对此模型进行了大量优化,使其更易于理解,减少了创建的意外副本数,并为可更改集合创建正式模式。 在新的 Freezable 模型中,只有两种状态:Frozen 和 Unfrozen。 创建对象时,默认取消冻结。 可以修改对象,例如,设置画笔颜色,然后冻结它。 一旦对象被冻结,它就会永远被冻结,不过你可以使用 Copy () 方法创建新的未冻结的深层克隆。 此模型中最大的简化是应用程序本身负责冻结对象,而不是在使用时发生此情况。

删除 SqlDataSource

SqlDataSource 旨在连接到SQL Server或其他 .NET 数据提供程序数据库,出于所有实际目的,仅限于企业网络方案。 为客户需求提供全面支持所需的配置选项的复杂性和范围意味着已采用替代方法。 Windows Presentation Foundation 中的数据绑定引擎仍然完全能够绑定到任何 ADO.NET 源中的数据;但是,检索数据的纯声明性方法现已弃用。

如果没有 SqlDataSource XAML 元素,请在代码隐藏文件中创建 ADO.NET 命令和数据集对象来填充 数据集 ,并将 DataSetDataTable 分配给 UI 元素的 DataContext 属性。 例如,若要加载 Access (.mdb) 文件,典型代码可能如下所示:

    string mdbFile = Path.Combine(AppDataPath, "db1.mdb");
    string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", mdbFile);
 
    OleDbConnection conn = new OleDbConnection(connString);
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand = new OleDbCommand("SELECT * FROM ExecsTable;", conn);
    DataSet ds = new DataSet();
    adapter.Fill(ds, "ExecsTable");
 
    // assign data set to a panel's DataContext:
    myPanel.DataContext = ds;

API 更改

有许多 API 更改,其中对象已重命名;完整列表超出了本文的范围,但值得强调的两项小而重大的更改将影响几乎每个应用程序。 首先,以前用于标识对象的 FrameworkElement.ID 属性已重命名为 Name,以便与Windows 窗体保持一致,并符合 FxCop。 其次,数据绑定语法已更改,使 {Bind} 现在为 {Binding}。 有关语法更改的更多详细信息,请参阅文档。

结论

Windows Presentation Foundation继续其从发布到生产的轨迹,基于 Beta 1 的版本为寻求探索增强的数据可视化、沉浸式 Web 体验或其他富媒体应用程序以评估使用方案并创建的工作原型的公司提供了一个很好的机会。基于Windows Presentation Foundation的应用程序。

Web 上有许多出色的资源可帮助你了解有关Windows Presentation Foundation的详细信息:

 

关于作者

Tim Sneath 在 Microsoft 担任 Windows 客户端技术传道人。 对于对未发布的技术感兴趣的人来说,有些讽刺的是,他还维护着一个完整的虚拟电脑映像博物馆,涵盖 Windows 1.0 至今。 直到最近,蒂姆在英国生活和工作,他仍然试图摆脱在下午3点停止工作的必要性,吃午茶和烤饼,以及所谓的难以逾越的口音。 他的博客可在 中找到 https://blogs.msdn.com/tims