WPF教程-XAML介绍

news2024/11/19 22:33:49

XAML介绍

1.定义

为构建应用程序用户界面而创建的一种新的“可扩展应用程序标记语言”,提供一种便于扩展和定位的语法来定义和程序业务逻辑分离的用户界面。

XAML 是一种 XML(Extensible Markup Language)的扩展,XAML 是 WPF 中用于定义用户界面的标记语言,它提供了一种声明性的方式来描述应用程序的外观和行为。通过使用 XAML,开发人员可以更好地组织和维护代码,并实现灵活且可交互的用户界面。

示例:

<Window x:Class="YourNamespace.YourWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:YourNamespace"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!-- 在此处使用命名空间中的类型和资源 -->
        <local:CustomControl />
        <Button Content="Click Me" Click="Button_Click" />
        <TextBlock Text="{Binding Path=MyProperty}" />
        <sys:String>Hello, World!</sys:String>
    </Grid>
</Window>

2.语言规范

XAML 是基于 XML 的语言,遵循或扩展 XML 结构规则。

对象元素语法是 XAML 标记语法,通过声明 XML 元素来实例化 CLR 类或结构。 此语法类似于其他标记语言(如 HTML)的元素语法。 对象元素语法以左尖括号 (<) 开头,后面紧跟进行实例化的类或结构的类型名称。 零个或多个空格可以跟在类型名称后面,零个或多个属性也可以在对象元素上声明,使用一个或多个空格分隔每个属性名称=“值”对。 最后,必须满足以下条件之一:

  • 元素和标记必须以正斜杠 (/) 结尾,后面紧跟右尖括号 (>)。
  • 开始标记必须以右尖括号 (>) 结尾。

具体定义就一下两种形式:<xxx /><ABC ></ABC>

例如,以下示例是对象元素语法

 <Button Content="Click Me" Click="Button_Click" />
 <TextBlock Text="{Binding Path=MyProperty}" ></TextBlock>

其他更详细的规范参考官网:
XAML 概述 - WPF .NET
XAML 语法描述 - WPF .NET

3.命名空间

xaml与C#一样,也有命名空间的概念,命名空间(Namespace)用于引用和使用特定类型和资源。通过引入适当的命名空间,可以在 XAML 中使用所需的类、结构、属性和其他定义。

xaml命名空间定义

框架自带命名空间的语法:

有一些wpf或者框架自带的命名空间,形式上看想网址,如:http://schemas.microsoft.com/winfx/2006/xaml/presentation,使用的时候按如下格式:

xmlns[:前缀名]=“命名空间描述”;

命名空间描述就是那个网址的内容,这种网址形式的命名空间是一种约定,旨在确保命名空间的唯一性,并提供一种简单的方式来引用和区分不同的命名空间。当您在 XAML 中定义命名空间时,您可以使用任何有效的网址形式的字符串作为命名空间标识符,只要它们在您的项目中是唯一的。
因此,尽管这些命名空间的网址形式看起来像是 URL 地址,但它们并不会与实际的网络资源相连,也不会在网络上进行访问。它们只是用作标识符,以确保命名空间的唯一性和可区分性。

自定义命名空间或程序集映射语法 :

xmlns[:必选前缀]="clr-namespace:[命名空间];assembly=[程序集名称]"

如果使用时不带前缀,就来自于默认的命名空间,其他的命名空间使用则必须带前缀。

常见的 XAML 命名空间

在 WPF 中,常见的 XAML 命名空间包括:

  1. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation":这是默认的命名空间,定义了用于创建 WPF 用户界面的基本元素,例如窗口、控件、布局等。
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml":这个命名空间定义了 XAML 的一些常用特性和属性,例如 XAML 命名空间的别名(x:)以及资源的引用和定义。
  3. xmlns:local="clr-namespace:YourNamespace":这个命名空间用于引用当前项目中的自定义类型和资源。local 是命名空间的前缀,YourNamespace 是包含自定义类型和资源的命名空间。
  4. xmlns:sys="clr-namespace:System;assembly=mscorlib":这个命名空间用于引用 .NET Framework 中的系统类型和类。sys 是命名空间的前缀,System;assembly=mscorlib 指定了 mscorlib 程序集中的 System 命名空间。

除了上述命名空间之外,还可以引用其他自定义命名空间、第三方库的命名空间或特定的 WPF 扩展命名空间,具体取决于您的项目需求。

<Window x:Class="YourNamespace.YourWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:YourNamespace"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!-- 在此处使用命名空间中的类型和资源 -->
        <local:CustomControl />
        <Button Content="Click Me" Click="Button_Click" />
        <TextBlock Text="{Binding Path=MyProperty}" />
        <sys:String>Hello, World!</sys:String>
    </Grid>
</Window>

扩展

将自定义命名空间定义成:http://***

作用:

在项目往往会有很多类和控件在不同命名空间中,如果全部使用命名空间直接引用,就需要很多,这种方式可以将多个命名空间转换成同一个

在framework项目中

找到Properties下面的AssemblyInfo.cs文件

在这里插入图片描述

在里面添加命名空间的映射转换

[assembly:XmlnsDefinition("http://www.wpfcustomlibrary.com/controls", "WpfCustomControlLibrary1")]

在这里插入图片描述

然后在使用的项目中添加该命名空间,就可以使用了

   xmlns:control="http://www.wpfcustomlibrary.com/controls"

在这里插入图片描述

在这里插入图片描述

如果有多个命名空间:

可以将其映射到同一个命名空间描述

在这里插入图片描述
在这里插入图片描述

使用时就可以使用同一个命名空间

在这里插入图片描述

在Net Standard项目中

添加和使用方法是一样的,不过AssemblyInfo.cs文件位置不一样,如何添加WPF相关的类库,直接在目录下面,如果普通类库可能没有这个文件,需要自己添加。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算——云计算与虚拟化的关系

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.虚拟化 1.什么是虚拟化 2.虚拟化技术作用 二.云计算与虚拟化的关系 三.虚…

一文让非技术宅读懂为什么AI更“喜欢”GPU而不是CPU?

一、引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;深度学习等算法在图像识别、自然语言处理、数据挖掘等方面表现出了强大的能力。而这些算法的底层计算&#xff0c;往往对硬件有着极高的要求。为了满足这些需求&#xff0c;越来越多的研究和工程实…

关于不同型号电脑谷歌浏览器下载指定版本的方法(超详细教程)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、根据链接打开地址2、页面说明3、下载过程&#xff08;1&#xff09;选中指定版本点击它&#xff08;这里以52.0.27.37.1为例&#xff09;&#xff08;2&…

美国访学博后答疑|尚未出国DS-2019表格过期了怎么办?

美国执J1签证者尚未出国&#xff0c;但DS-2019表格过期了怎么办&#xff1f;本篇知识人网老师就以下三种情况&#xff0c;统一做答疑建议。 美国访问学者和博士后的签证类型多是J1签证&#xff0c;需要由美国接收方将签字后的DS2019表邮寄给国内&#xff0c;申请者本人在表格正…

多项安全新功能为云上安全保驾护航,就在亚马逊云科技re:Inforce全球大会

亚马逊云科技re:Inforce 2023全球大会于当地时间2023年6月13日在美国加州安纳海姆拉开帷幕。在大会上&#xff0c;亚马逊云科技宣布推出十多项安全新服务及功能&#xff0c;下面就来一览本次大会的风采。 “Security is our top priority.” “安全是我们的首要优先级”&#…

Socket 传情:使用 Python 发送 GET 请求

文章目录 参考描述HTTPHTTP 报文HTTP 请求报文请求行请求头空行请求体 HTTP 响应报文状态行响应头空行响应体 HTTP 请求方法HTTP 与 TCP 协议HTTP 协议TCP 协议 httpbin.org socket 模块socket.socket()Socket().connect()Socket().send() 与 Socket().sendall()Socket().recv(…

AI实战营第二期 第十节 《MMagic 代码课》——笔记11

AI实战营第二期 第十节 《MMagic 代码课》 MMagic (Multimodal Advanced, Generative, and Intelligent Creation) 是一个供专业人工智能研究人员和机器学习工程师去处理、编辑和生成图像与视频的开源 AIGC 工具箱。 MMagic 允许研究人员和工程师使用最先进的预训练模型&…

wms add window 流程

二、WMS 窗口添加流程 /frameworks/base/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java boolean realStartActivityLocked(ActivityRecord r, WindowProcessController proc,boolean andResume, boolean checkConfig) throws RemoteException {.....…

ESP-C2模组 AT示例程序

ESP32C2 AT固件使用 ESP32 C2模组&#xff0c;如图1-1所示 图1-1 ESP32 C2模组 ESP32 C2开发板&#xff0c;如图1-2所示 图1-2 ESP32 C2开发 方案亮点 1、完整的 WiFi 子系统&#xff0c;符合 IEEE 802.11b/g/n 协议&#xff0c;具有 Station 模式、SoftAP 模式、SoftAP Stat…

2023电商运营课程培训课程干货

​电商运营是当今社会最为火热的词汇之一&#xff0c;在各个领域有着广泛的运用。各种途径的线上销售使得产品的销售以及品牌的推广变得更加容易&#xff0c;因此越来越多的人选择从事电商运营。而电商运营的成功离不开专业的培训&#xff0c;为此许多机构推出了电商运营课程培…

python数据结构详解

Python是一种高级编程语言&#xff0c;它具有简单易学的语法和强大的数据结构。在Python中&#xff0c;数据结构是指一组数据和与之相关的操作的集合。Python提供了许多数据结构&#xff0c;包括列表、元组、字典、集合和字符串。本文将深入介绍Python中的数据结构&#xff0c;…

离散数学题目收集整理练习(期末过关进度40%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 ✨博主的其他文章&#xff1a;点击…

ubuntu18.04设置自启动踩坑贴(拿来即用)---全网搜索半天都没有,ChatGPT回答都是有问题的!!

前言&#xff1a;其实很简单&#xff0c;全网的资料实在坑太多&#xff08;无语&#xff09;&#xff0c;有一篇还不错&#xff0c;我大多数借鉴这篇https://cloud.tencent.com/developer/article/1803805&#xff0c;但直接用貌似也不通&#xff0c;这边记录了我的实测可跑通版…

【AIGC】BaiChuan7B开源大模型介绍、部署以及创建接口服务

模型介绍 baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构&#xff0c;在大约1.2万亿tokens上训练的70亿参数模型&#xff0c;支持中英双语&#xff0c;上下文窗口长度为4096。在标准的中文和英文权威benchmark&#xff08;C-EVAL/MMLU&#x…

游戏革命2023:AIGC拯救游戏厂商

文明史即工具史&#xff0c;纵观人类社会的演化&#xff0c;每一次的加速迭代&#xff0c;都有赖于关键性的技术突破。 前有蒸汽机到电力普及的生产力大爆发&#xff0c;以及计算机、互联网的诞生打开新世界&#xff0c;如今AIGC将再次推动先进技术工具的变革。 随着ChatGPT的…

​​​​​​​微信怎么快捷回复?

怎么快速的回复客户一直问的问题&#xff0c;还在一个个回&#xff0c;我直接把常问问题的回复编辑好&#xff0c;直接一秒搞定回复&#xff0c;客户还以为我敲字速度杠杠的 #快捷回复 #微信怎么快速回复信息 #话术

深入理解Java虚拟机jvm-对象的内存布局

对象的内存布局 对象头&#xff08;Header&#xff09;实例数据&#xff08;Instance Data&#xff09;对齐填充&#xff08;Padding&#xff09; 在HotSpot虚拟机里&#xff0c;对象在堆内存中的存储布局可以划分为三个部分&#xff1a;对象头&#xff08;Header&#xff09;、…

简要介绍 | 计算机视觉中的开放词汇:挑战与未来

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对计算机视觉中的开放词汇(open vocabulary)进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 注2&#xff1a;"简要介绍"系列的所有创作均使用了AIGC工具辅助 计算机视觉中的开放词汇&…

ASP.NET Core MVC 从入门到精通之鉴权授权基础

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

在 ZBrush、Substance 3D Painter 和 UE5 中创作警探角色(P2)

大家好&#xff0c;下篇分享咱们继续来说警探角色的重新拓扑、UV、材质贴图和渲染处理。 重新拓扑/UV 这是对我来说最不有趣的部分——重新拓扑。它显然是实时角色中非常重要的一部分&#xff0c;不容忽视&#xff0c;因为它会影响大量的 UV、绑定和后期渲染&#xff0c;这里…