关于WPF你应该知道的 2000 件事;WPF 开发人员需要知道的一切
11 – (命令)Commands
WPF 提供对命令的支持,其中命令是独立于启动任务的 GUI 元素执行特定任务的对象。命令的主要目的是将多个控件共有的代码移到中央位置,而不是单个控件的事件处理程序。这允许多个控件调用相同的命令逻辑。
您可以通过将命令对象绑定到代码来创建命令。
WPF 包括一个预先创建的命令库,用于复制、剪切和粘贴等常见任务。这些命令对象只是占位符——您仍然需要编写为每个命令执行实际工作的代码。
下面是通过内置命令将 Button 绑定到自定义代码的示例。
<Button Content="New" Command="ApplicationCommands.New"/>
// Create binding--which binds the command to your code
CommandBinding binding = new CommandBinding(ApplicationCommands.New);
binding.Executed += new ExecutedRoutedEventHandler(CommandNew_Executed);
this.CommandBindings.Add(binding);
12 – 标记和代码隐藏
WPF 应用程序由标记 (XAML) 和代码隐藏(托管代码)组成。标记定义了应用程序的布局和外观,而代码隐藏定义了行为。
WPF 标记是使用 XAML 编写的,XAML 是一种基于 XML 的声明性标记语言。 XAML 列出了组成应用程序的控件、它们的关联方式以及它们的显示方式。
<Grid>
<StackPanel>
<Button Content="Save" Height="23" Name="btnSave" Width="75" Click="btnSave_Click" />
<Button Content="Load" Height="23" Name="btnLoad" Width="75" Click="btnLoad_Click" />
</StackPanel>
</Grid>
13 – 标记的好处
与在代码中定义所有内容相比,使用标记 + 代码隐藏模型进行应用程序开发有很多好处。
使用标记/XAML 的好处:
- 可以在不更改行为的情况下更改应用程序的外观
- 可以通过更改 XAML 来更改外观
- 设计人员可以在开发人员处理行为(代码)的同时处理外观(XAML)
- 呈现应用程序的设计工具
- 工具可以只解释 XAML,而不必执行创建控件的代码
- 意味着 Visual Studio 以外的工具(例如 Blend)可用于仅在用户界面上工作
- 用户界面 XAML 可以由设计工具以编程方式生成
14 – 基于页面的导航
WPF 应用程序可以构建为页面集合,在页面之间具有内置导航。这与更传统的(Win Forms)基于文档的模型不同,在这种模型中,应用程序显示一个主窗口和弹出的对话框。
要创建基于页面的应用程序,请使用 Page 对象作为应用程序中的顶级容器,而不是 Window。
<Page x:Class="WpfApplication7.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">
<Grid>
<Label Content="This is a page, not a window." Height="28" HorizontalAlignment="Left" Margin="52,75,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
要使此页面成为应用程序启动时加载的主要对象,请设置主应用程序的 StartupUri 属性:
<Application x:Class="WpfApplication7.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Page1.xaml">
</Application>
请注意,我们现在得到一个顶部带有导航控件的主窗口。
15 – WPF 与 Silverlight 和 ASP.NET
WPF、Silverlight 和 ASP.NET 是微软的三个主要应用程序开发平台。
- WPF
- 用于开发 Windows 应用程序
- 厚客户端用户界面,具有最丰富的用户控件和 Windows 特定功能
- 平台——仅在 Windows 上运行,在浏览器中或在浏览器外
- 需要在客户端安装完整的 .NET Framework
- Silverlight
- 用于开发也可能在浏览器之外运行的 Web 应用程序
- 瘦客户端,拥有更丰富的 UI 控件,更接近传统的胖客户端控件
- 平台
- 在大多数浏览器中作为浏览器插件运行
- Silverlight 客户端软件可在 Windows、Mac OS X、Windows Phone 7 上运行
- Silverlight 的 Moonlight 版本允许在 Linux 上运行
- 需要在客户端安装 Silverlight 框架(首次加载页面时)
- ASP.NET
- 用于开发 Web 应用程序
- 瘦客户端,具有相当通用的基于 Web 的控件
- 平台——在服务器上运行,因此客户端在任何平台上作为标准 HTML 交付——包括移动设备上的浏览器
- 不需要在客户端上安装任何东西
16 – 将 Direct3D 用于硬核 3D 应用程序
尽管 WPF 支持绘制 3D 对象,但在应用程序需要 WPF 未提供的 3D 功能或需要在绘制 3D 对象时获得最高性能的情况下,仍应使用 Direct3D。
WPF 4.0 基于 DirectX 9,因此不支持 Direct3D 10 或 Direct3D 11。
17 – WPF 发布历史
以下是 WPF 各种版本的历史,以及支持它的 Visual Studio 的相应版本。由于 WPF 是 .NET Framework 的一部分,因此它根据 .NET Framework 版本进行编号。 (例如,WPF 3.5 是指使用 .NET Framework 3.5 发布的 WPF)。
- NET Framework 3.0 – Nov, 2006
- 1st release of WPF
- CLR version 2.0
- Visual Studio 2005 SP1
- Incl w/Windows Vista
- .NET Framework 3.5 – Nov, 2007
- Various improvements to WPF
- CLR version 2.0 SP1
- Visual Studio 2008
- Incl w/Windows 7
- .NET Framework 3.5 SP1 – Aug, 2008
- Performance improvements (et al) to WPF
- CLR version 2.0 SP2
- Visual Studio 2008 SP1
- .NET Framework 4.0 – Apr, 2010
- Various improvements to WPF
- CLR version 4.0
- Visual Studio 2010
- .NET Framework 4.5 – Aug, 2012
- Various improvements to WPF
- CLR version 4.5
- Visual Studio 2012
- Incl w/Windows 8
18 – Silverlight 和 WPF 的差异
Silverlight 的原始名称是 WPF/E (WPF/Everywhere),强调了 Silverlight 遵循与 WPF 相同的编程模型并使用许多相同控件的事实,但基于从浏览器下载并针对运行的客户端库在更广泛的平台上。
WPF 和 Silverlight 之间的核心区别:
- WPF 仅在 Windows 平台上运行
- WPF 希望 .NET Framework 已经存在于客户端
- Silverlight可以使用所有 WPF 控件的子集
- Silverlight 使用完整 .NET Framework 和 CLR 的子集
WPF 中存在但 Silverlight 中不存在的功能:
- 流文档支持
- 动态资源
- 合并字典
- 将样式重置为新的 FrameworkElement
- 风格继承
- 具有 TargetType
- 属性的隐式样式 样式、控件模板、数据模板的触发器。
- 大量数据绑定功能
- 路由命令
- 声明性地关联控件和命令
- 继承自 UIElement
- 自定义标记扩展
- 运行时可访问的可视化和逻辑树
- 控件:AccessText、BulletChrome、ButtonChrome、ContextMenu、Decorator、DocumentPageView、DocumentViewer、GridViewColumnHeader、GridViewRowPresenter、GroupBox、GroupItem、InkCanvas、Menu、MenuItem、PageContent、Ribbon、Separator、StatusBar、TickBar、ToolBar、Track、UniformGrid、
Silverlight 中存在但 WPF 中不存在的功能:
- 深度缩放
- 控件:AutoCompleteBox、DataPager、DescriptionViewer、HyperlinkButton、MultiScaleImage、NumericUpDown、ValidationSummary
19 – System.Windows 命名空间
WPF 应用程序将使用的大多数用户界面相关类都位于 System.Windows 命名空间或其从属命名空间之一。
System.Windows 中存在的一些类:
- Application——封装了一个 WPF 应用程序
- Clipboard- 向/从剪贴板传输数据
- ContentElement –内容元素的基类,用于流样式的呈现
- DataObject – 传输数据
- DataTemplate – 数据对象的视觉结构
- DependencyObject – 参与依赖属性系统的对象
- DependencyProperty – 支持数据绑定、继承等的属性。
- EventManager – 与事件相关的实用方法
- FrameworkElement – 扩展 UIElement 并提供对逻辑树等的支持
- MessageBox – 显示消息框
- ResourceDictionary – 包含 WPF 资源的字典
- RoutedEvent –路由事件
- Style – 实例之间共享属性/资源
- UIElement – 图形元素的基类
- UIElement3D – 3D 元素的基类
-Window - 用户界面中的窗口
20 – 独立和浏览器托管的应用程序
您可以使用 WPF 创建在 Windows 上运行的独立应用程序,或在浏览器窗口中运行的浏览器托管应用程序。浏览器托管的应用程序也称为 XBAP(XAML 浏览器应用程序)。
您可以通过将 XBAP 托管在 Web 服务器上来发布它。然后,当用户第一次浏览到承载 XBAP 的页面时,会按需下载并安装该应用程序。用户界面显示在您的浏览器窗口中。
XBAP 可以在 Internet Explorer 或 Firefox 中运行。它们在部分信任的沙盒环境中运行。