关于 WPF 你应该知道的 2000 件事(二)

13 篇文章 5 订阅

关于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、HyperlinkBut​​ton、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 中运行。它们在部分信任的沙盒环境中运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值