没有合适的资源?快使用搜索试试~ 我知道了~
首页01. XAML 概述 (WPF).pdf 源自微软官网MSDN全文翻译,加注释
适合:自学WPF的初学者。此文档源自微软官网原文翻译。为入门文档,后继文档正在紧张翻译中。 笔者在学习WPF时有一个非常痛苦的经验,那就是,市场上买的书要么就晦涩难懂,要么就不尽不实;于是,我自己去微软的官网看他们的官方原文…… 可是打开网页,都是机器自动翻译的中文,几乎完全看不懂。设置为英文原文后发现,是翻译的问题! 技术文的翻译和日常用语翻译在语序、语法、用词取意方面是完全不同的。 为了服务于自己,也服务于众多看不明白的同僚,精心对原文进行了翻译。并在一些不易理解的地方加入了“译注”。 (修改了一小部分由于以前的常见翻译方法反而难以理解的地方,如“code-behind“,常见资料中直译为”代码隐藏“,笔者改为了”后台代码“,这样更便于理解。) 由于笔者水平尚浅,有些东西还是没能完全吃透,不尽不实处还望指正、交流,互相学习。
资源详情
资源评论
资源推荐

XAML overview (WPF & .NET Core) 2019/08/08
https://docs.microsoft.com/zh-cn/dotnet/desktop-wpf/fundamentals/xaml#case-and-
white-space-in-xaml
XAML 概述 (WPF)
什么是 XAML?
XAML 是一种声明性标记语言。应用于 .NET Framework 编程模型时,XAML 简化了为 .NET
Framework UI 应用程序创建的工作。可以在声明性 UIXAML 标记中创建可见元素,然后使用通过分
部 UI 类定义联接到标记的后台代码文件,将定义与运行时逻辑分离。XAML 直接以程序集中定义的
一组特定后备类型表示对象的实例化。这与大多数其他标记语言不同,后者通常是与后备类型系统没
有此类直接关系的解释语言。XAML 实现了一个工作流,通过此工作流,各方可以采用不同的工具来
处理 UI 和应用程序的逻辑。
以文本表示时,XAML 文件是通常具有 .xaml 扩展名的 XML 文件。可通过任何 XML 编码对文
件进行编码,但通常以 UTF-8 编码。
以下示例演示如何创建 UI 中的按钮。此示例仅用于初步了解 XAML 如何表示常用 UI 编程形式
(它不是一个完整的示例)。
<StackPanel>
<Button Content="Click Me"/>
</StackPanel>
XAML 语法简述
下面章节介绍 XAML 语法的基本形式,并提供一个简短的标记示例。这些章节并不提供每个语法
形式的完整信息,例如这些语法形式如何在后备类型系统中表示。有关本主题中介绍的每种语法形式
的 XAML 语法详情,请参阅 XAML 语法详述。
如果熟悉 XML 语言,则下面几节中的很多内容对你而言都是基础知识。这归因于 XAML 的一个
基本设计原则。XAML 语言可以定义其自己的概念,但这些概念也适用 XML 语言和标记形式。
XAML 对象元素
对象元素通常声明一个类型的实例。该类型在程序集中定义,而后者则为使用 XAML 作为语言的
技术提供后备类型。
对象元素语法始终以左尖括号 (<) 开头。后跟要创建实例的类型的名称。(该名称可能包含前
缀,下文将解释前缀的概念。)此后可以选择声明该对象元素的特征。要完成对象元素标记,请以右
尖括号 (>) 结尾。也可以使用不含任何内容的自结束形式,方法是用一个正斜杠后接一个右尖括号
(/>) 来完成标记。例如,请再次查看之前演示的标记片段:
<StackPanel>
<Button Content="Click Me"/> <!--自结束形式-->
</StackPanel> <!—完整结束形式-->

XAML overview (WPF & .NET Core) 2019/08/08
https://docs.microsoft.com/zh-cn/dotnet/desktop-wpf/fundamentals/xaml#case-and-
white-space-in-xaml
这指定了两个对象元素:<StackPanel>(含有内容,后面有一个结束标记)和 <Button .../>
(自结束形式,包含几个特征 attributes)。对象元素 StackPanel 和 Button 各映射到一个类名,
该类由 WPF 定义并且属于 WPF 程序集。指定对象元素标记时,会创建一条指令,指示 XAML 处理创
建新实例。在分析和加载 XAML 时,通过调用基础类型的无参数构造函数来创建每个实例。
特征语法 (attribute 代替属性 properties)
对象的属性(properties)通常可表示为对象元素的特征(attribute)。特征(attribute)语
法针对在特征(attribute)语法中设置的属性(properties)命名,后跟赋值运算符 (=)。特征
(attribute)的值始终指定为包含在引号中的字符串。
译注 特征(或属性)=”值”:
特征(attribute)语法,实际上是使用与设置特征(attribute)相同的方法来设置属性值(properties),以便于阅
读和简化使用。
特征(attribute)语法是最简化的属性(properties)设置语法,并且对曾使用过标记语言的
开发人员而言是最直观的语法。例如,以下标记将创建一个具有红色文本和蓝色背景的按钮,还将创
建指定为 Content 的显示文本。
<Button Background="Blue" Foreground="Red" Content="This is a
button"/>
属性(.properties)元素语法
对于对象元素的某些属性,无法使用特征语法,因为无法在特征语法的引号和字符串限制内充分
地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性元素语法。
属性元素开始标记的语法为 <typeName.propertyName>。
通常,该标记的内容是该属性(properties)作为其值的类型的对象元素。指定内容之后,必须
用结束标记关闭属性元素。
属性元素结束标记的语法为 </typeName.propertyName>。
译注 <对象.属性>:
属性语法与特征语法最显著的区别是:使用 <对象.属性> … </对象.属性> 的形式来设置属性。
主要应用于:某个属性(property)中包含了多个特征的情况下。
如果可以使用特征语法,那么使用特征语法通常更为方便,且能够实现更为精简的标记,但这通
常只是样式问题,而不是技术限制。以下示例演示在前面的特征语法示例中设置的相同属性,但这次
对 Button 的所有属性使用属性元素语法。

XAML overview (WPF & .NET Core) 2019/08/08
https://docs.microsoft.com/zh-cn/dotnet/desktop-wpf/fundamentals/xaml#case-and-
white-space-in-xaml
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
This is a button
</Button.Content>
</Button>
集合语法
XAML 语言包含一些优化,可以生成更易于阅读的标记。其中一项优化是:如果某个特定属性采
用集合类型,则在标记中声明为该属性的值内的子元素的项将成为集合的一部分。在这种情况下,子
对象元素的集合是设置为集合属性的值。
译注 属性的集合:
集合语法针对于“某个特定属性采用集合类型“的对象,实际上是”属性语法“的一种扩展。形式与属性语法
雷同:属性采用”属性语法“,其中的属性集合成员使用特征语法。
下面的示例演示了用于设置 GradientStops 属性值的集合语法:
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<!-- no explicit new GradientStopCollection,parser knows how to
find or create -->
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
XAML 内容(content)属性(properties)
XAML 指定了一个语言功能,通过该功能,类可以指定它的一个,且仅一个属性为 XAML 内容属
性。该对象元素的子元素用于设置该内容属性的值。换言之,仅对内容属性而言,可以在 XAML 标记
中设置该属性时省略属性元素,并在标记中生成更直观的父级/子级形式。
例如,Border 指定一个 Child 的内容属性。以下两个 Border 元素的处理方式相同。第一个,元
素利用内容属性语法并省略 Border.Child 属性元素。第二个,元素显式设置 Border.Child。
剩余14页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论0