Always ke|

石起起

园龄:1年10个月粉丝:1关注:0

2025-02-05 20:11阅读: 11评论: 0推荐: 0

第2章-XAML

XAML 名称空间

xmlns="http://schemax.microsft.com/winfx/2006/xaml/presentation" WPF 核心名称空间。它包含了所有 WPF 类,包括用来构建用户界面的控件。
在该例中,该名称空间的声明没有使用一名称空间前缀,所以它成为整个的默认名称空间。换句话说,除非另行指明,每个元素自动位于这个名称空间。

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" XAML 名称空间。它包含各种 XAML 实用特性,这些特性可影响文档的解释方式。
该名称空间被映射为 x. 这意味着可通过在元素名称之前放置名称空间前缀 x 来使用该名称空间。

<Window x:Class="WindowApplication1.Window1" 表示创建一个新类,这里指的是一个窗体类。而这个窗体类正好是一个 partail class,因此会与隐藏的 Window1.xaml.cs (这个叫:代码隐藏类)中的逻辑代码融合到一起,形成单一的单元。

命名元素

x:Name = "grid1" 等价于 `Name = "grid1"

简单属性

key = value 这样的就是简单属性。属性 = 特性。
属性对应的值,即关联字符串值将由类型转换器执行转换。
因此,如果希望将属性值转换成自定义的类型,可以在属性声明中改用 TypeConverter 特性。 👈❌不推荐使用。

关联:WPF系统级Converter - Dwaynerbing - 博客园 (cnblogs.com)

复杂属性 👉 也叫嵌套属性。

👉 属性元素语法。
采用嵌套式的元素表达属性的写法 👉 Grid.Background 。比如设置背景色为线性渐变时。

标记扩展

{} 用花括号设置值,如绑定,叫做标记扩展。

普通写法:

<Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}"/>

🔥 嵌套属性写法:

<Button ...>
    <Button.Foreground>
        <x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>
    </Button.Foreground>
</Button>

附加属性

附加属性是可用于多个控件但在另一个类中定义的属性。在 WPF 中,附加属性常用于控件布局。
比如设置 TextBox 在 Grid 中的位置时,Grid.Row 就是 TextBox 的附加属性。
附加属性虽然格式是属性的写法,但在实际运行是,它会被转换成方法。
这里的 Grid.Row 将会转换成 Grid.SetRow()。

💡 附加属性其实是特殊类型的依赖属性。

嵌套元素

嵌套的元素,使用以下三种机制进行中转

  • 如果父元素实现了 IList 接口,解析器将调用 IList.Add() 方法,并且为该方法传入子元素作参数。
  • 如果父元素实现了 IDictionary 接口,解析器将调用 IDictionary.Add() 方法,并且为该方法传递子元素作为参数。当使用字典集合时,还必须设置 x:Key 特性以便为每个条目指定键名。
  • 如果父元素使用 ContentProperty 特性进行修饰,解析器将使用子元素设置对应的属性。

特殊字符与空白

小于号:<
大于号:>
&符号:&
引号":"
...

💡 保留文本中的空格

默认情况下,XAML 折叠所有空白,这意味着包含空格、TAB 键以及硬的长字符串将被转换为单个空格。

👉 使用该特性会保留所有的空格。❗❗❗除了文本中的空格,回车换行及TAB键也会被保留下来。
也就是说:如果下面的文本是分两行的,字显示的时候也是显示两行的。
👉 需要特别注意的是,文本之前的缩进也会被当成空格添加到文本之前。

<TextBox xml:space="preserve" ...>
	[There is a lot of space inside these quotation marks "         ".]
</TextBox>

使用其他名称空间中的类型

引用类时名称空间映射到XML名称空间语法:

xmlns:Prefix="clr-namespace:Namespace;assembly=AssemblyName"

xmlns:映射名="clr-namespace:类库中命名空间的名字;assembly=类库文件名"

  • Prefix:名称空间前缀(相当于映射的别名)
  • Namespace:是完全限定的 .NET 名称空间
  • AssemblyName:是声明类型的程序集,没有 .dll 扩展名。

👉 引用 System 名称空间中的基本类型

xmlns:sys="clr-namespace:System;assembly=mscorlib"

👉 只引用项目集(以下引用当前项目)

xmlns:local="clr-namespace:MyNameSpace"

💡 只引用了当前项目所在的名称空间,即使使用本地项目的所有类

<sys:DataTime>10\12\2 10:20 PM</sys:DataTime> 💡 中间的文本会被自动转换成日期格式

加载和编译 XAML

以下三种方式都可以

  • 只使用代码
  • 使用代码和未经的标记(XAML)
  • 使用代码和编译过的标记(BAML)

💡 XAML 被编译后的文件为 BAML 文件,位于 obj/Debug 目录下。而对应的 CS 文件,则会在 obj/Debug 目录下生成为 .g.cs 文件 (g 表示生成的)

本文作者:石起起

本文链接:https://www.cnblogs.com/myshiqiqi/p/18700084

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   石起起  阅读(11)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起