“x命名空间”的x是映射XML命名空间时给它取的名字(取XAML的首字母),里面的成员(如xClass、x:Name)是专门写给XAML编译器看、用来引导XAML编译器把XAML代码编译成CLR代码的。

x命名空间内容

x命名空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,包含的类均与解析XAML语言相关,所以亦可称之为“XAML命名空间”。x命名空间里面的类能让程序员与XAML编译器沟通,如下表所示:

名称 类别
x:Array 标记扩展
x:Class Attribute
x:ClassModifier Attribute
x:Code XAML指令元素
x:FieldModifier Attribute
x:Key Attribute
x:Name Attribute
x:Null 标记扩展
x:Shared Attribute
x:Property Attribute
x:Static 标记扩展
x:Subclass Attribute
x:Type 标记扩展
x:TypeArguments Attribute
x:Uid Attribute
x:XData XAML指令元素

由上面的表可以看出,它们可以分为Attribute、标记扩展和XAML指令元素。

x命名空间的Attribute

x:Class

作用:为标签添加xClass=“目标类名”这样一个Attribute(x:Class这个Attribute并不是对象的成员),告诉XAML编译器将编译结果与哪个C#编译的类合并

用法:namespace可选,classname必需。

  1. <object x:Class="namespace.classname"...>
  2. ...
  3. </object>

注意:x:Class只能在XAML生产的根元素上指定,对于在XAML中具有父对象的任何对象无效。

注:x:Property、x:TypeArguments、x:Uid、x:Subclass不常用,暂不介绍。

x:ClassModifier

作用:告诉XAML编译由标签编译生成的类具有怎样的访问控制级别。

用法

  1. <object x:Class="namespace.classname" x:ClassModifier="NotPublic">
  2. ...
  3. </object>

注意:必须在同一元素上提供x:Class,并且该元素必须是页面中的根元素。

x:Name

作用

  • 告诉XAML编评器,当一个标签带有x:Name时除了为这个标签生成对应实例外还要为这个实例声明一个引用变量,变量名就是x:Name的值
  • 将XAML标签所对应对象的Name 属性(如果有)也设为x:Name的值,并把这个值过册到UI树上,以方发查找。

    用法
  1. <object x:Name="XAMLNameValue".../>

注意:对象有Name属性时Name和x:Name是可以互换的,对象没有Name属性时只能用x:Name,全部使用x:Name以增强代码的统一性和可读性

x:FieldModifier

作用:使用x:Name后,XAML标签对应的实例就具有了自己的引用变量(类的字段),x:FieldModifier就是用来在XAML里改变引用变量访问级别的

用法

  1. <object x:FieldModifier="Public".../>

注意:使用x:FieldModifier的前提是这个标签同时也使用x:Name,该XAML标签的根元素必须声明x:Class指令

x:Key

作用:唯一标识在XAML定义的字典中创建和引用的元素,x:Key在 XAML 对象元素中添加值是在资源字典中标识资源的最常见方法。

用法

先在Window的资源字典里添加一个条目(一个字符串),在XAML中多次使用这个字符串,代码如下:

  1. <Window x:Class="LearnWpf.MainWindow" x:ClassModifier="internal"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:LearnWpf"
  7. xmlns:sys ="clr-namespace:System;assembly=mscorlib"
  8. mc:Ignorable="d"
  9. Title="MainWindow" Height="165.79" Width="232.72">
  10. <Window.Resources>
  11. <sys:String x:Key="myString">Hello WPF Resoureel</sys:String>
  12. </Window.Resources>
  13. <Grid>
  14. <TextBox HorizontalAlignment="Left" Height="23" Margin="58,38,0,0" TextWrapping="Wrap" Text="{StaticResource myString}" VerticalAlignment="Top" Width="120"/>
  15. <TextBox HorizontalAlignment="Left" Height="23" Margin="58,66,0,0" TextWrapping="Wrap" x:Name="textBox1" VerticalAlignment="Top" Width="120"/>
  16. <Button Content="Button" HorizontalAlignment="Left" Margin="58,94,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
  17. </Grid>
  18. </Window>

资源不但可以在XAML中访问,在C#中也可以访问,代码如下:

  1. private void Button_Click(object sender, RoutedEventArgs e)
  2. {
  3. string str=this.FindResource("myString") as string;
  4. this.textBox1.Text = str;
  5. }

x:Shared

作用:设置false为时,修改WPF资源检索行为,以便对属性资源的请求为每个请求创建一个新实例(默认值为true,即所有请求共享同一实例)。

用法

  1. <ResourceDictionary>
  2. <object x:Shared="false".../>
  3. </ResourceDictionary>

注意:x:Shared一定要**与x:Key配合使用。

x命名空间的标记扩展

x:Type

作用:当在XAML中想表达某个数据类型时就需要使用x:Type标记扩展,比如为某个类的一个属性赋值,它的值要求是一种数据类型。

用法:创建了一个Button的派生类,点击按钮时弹出一个自定义窗体MyWindow,代码如下:

  1. <Grid>
  2. <local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:MyWindow}" Margin="5"/>
  3. </Grid>
  1. class MyButton : Button
  2. {
  3. public Type UserWindowType { get; set; }
  4. protected override void OnClick()
  5. {
  6. base.OnClick();// 激发Click事件
  7. Window win = Activator.CreateInstance(this.UserWindowType) as Window;
  8. if (win != null)
  9. {
  10. win.ShowDialog();
  11. }
  12. }
  13. }

注意:因为TypeExtension类的构造器可以接受数据类型名作为参数,所以完全可以这样写:

  1. UserWindow Type="{x:Type local:MyWindow}"

x:Null

作用:指定null作为XAML成员的值。

用法:如果一个属性具有默认值而我们又不需要这个默认值时就需要显式地设置nul值了,如显式地将某个实例的Style属性设置为x:Null,代码如下:

  1. <Window.Resources>
  2. <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
  3. <Setter Property="Width" Value="60"/>
  4. <Setter Property="Height" Value="36"/>
  5. <Setter Property="Margin" Value="5"/>
  6. </Style>
  7. </Window.Resources>
  8. <Grid>
  9. <Button Content="Button" HorizontalAlignment="Left" Margin="51,48,0,0" VerticalAlignment="Top" Width="75"/>
  10. <Button Content="Button" HorizontalAlignment="Left" Margin="51,89,0,0" VerticalAlignment="Top" Width="75"/>
  11. <Button Content="Button" HorizontalAlignment="Left" Margin="51,145,0,0" VerticalAlignment="Top" Width="75" Style="{x:Null}"/>
  12. </Grid>

x:Array

作用:通过x:Array的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明。

用法:下面这个例子是把一个x:Array当作数据源(在WPF中把包含数据的对象称为数据源)向一个ListBox提供数据,代码如下:

  1. <Grid>
  2. <ListBox >
  3. <ListBox.ItemsSource>
  4. <x:Array Type="sys:String">
  5. <sys:String>Tim</sys:String>
  6. <sys:String>Tom</sys:String>
  7. <sys:String>Victor</sys:String>
  8. </x:Array>
  9. </ListBox.ItemsSource>
  10. </ListBox>
  11. </Grid>

注意:在XAML文档里声明一个包含数据的x:Array 实例,必须使用标签式声明才能做到

x:Static

作用:在XAML文档中使用数据类型的static成员,一个很常用的标记扩展。

用法

  1. <object property="{x:Static prefix:typeName.staticMemberName}" .../>

x命名空间的XAML指令元素

x:Code

作用允许在XAML生产中放置代码。 此类代码可由编译XAML的任何XAML处理器实现进行编译,或在XAML生产环境中保留,以供以后使用(如运行时的解释)使用。

用法:建议将代码包含在CDATA

  1. <x:Code>
  2. // 此处的代码格式和后台代码文件中的格式相同
  3. </x:Code>
  4. <!--例如-->
  5. <x:Code>
  6. <![CDATA[
  7. private void Button_Click(object sender, RoutedEventArgs e)
  8. {
  9. MessageBox.Show("x:Code代码");
  10. }
  11. ]]>
  12. </x:Code>

注意

  • x:Code指令元素必须是XAML生成的根元素的直接子元素。
  • 必须在父根元素上提供X:Class 指令。
  • 定义的所有代码必须是此分部类的成员或变量。
  • 除了在分部类中嵌套类之外,不能定义其他类。
  • 对分部类之外的代码实体的引用必须完全限定。

x:XData

作用:启用XML数据岛在XAML中的放置,x:XData可以包含任意格式正确的XML

WPF中把包含数据的对象称为数据源,用于把数据源中的数据提供给数据使用者的对象被称为数据提供者(Data Provider)。WPF类库中包含多种数据提供者,其中有一个类叫XmlDataProvider,专门用于提供XML化的数据。如果想在XAML里声明一个带有数据的XmlDataProvider 实例,那么XmlDataProvider 实例的数据就要放在x:XData标签的内容里。

用法

  1. <x:XData>
  2. <elementDataRoot>
  3. [elementData]
  4. </elementDataRoot>
  5. </x:XData>

参考资料

深入浅出WPF笔记——X名称空间详解

XAML 命名空间 (x:)语言功能

WPF之x命名空间的更多相关文章

  1. 10、WPF程序集

    WPF核心程序集 PresentationCore.dll:这个程序集定义了许多构成WPF GUI层基础的类型.例如包含WPF Ink API(pc笔针输入,手写输入)的支持.几个动画基元以及几个图形 ...

  2. 武汉软件开发:一看就会的wpf入门教程

    据了解,目前武汉软件开发市场关于PC端桌面开发的技术主要有两块:winform和wpf.wpf是微软既winform之后推出的一套新的桌面开发技术.采用数据驱动的方式可以轻松编写出非常炫的界面. 1. ...

  3. WPF系列(1)WPF和XAML基础

    终于下定决心开始更新WPF一个系列的文章,这里主要是出于两个目的,一是自己对所学的知识有一个系统的总结,二十希望能对其他人有些帮助,如果您觉得我写的不好,欢迎提意见. 那么既然我要开始写WPF,那我们 ...

  4. WPF基础学习笔记整理 (二) XAML

    基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...

  5. WPF教程一:基础

    一.WPF简介WPF:WPF即Windows Presentation Foundation,翻译为中文“Windows呈现基础”,是微软推出的基于Windows Vista的用户界面框架,属于.NE ...

  6. XAMl使用其他命名空间中的类型及加载和编译

    以前我们讲过XAMl命名空间.为了使便宜钱知道XAMl文档中元素对应的.NET类型,需要知道XAMl明档中指定特定的两个命名空间.XAML是一种实例化.NET对象的通用方法 ,除了可以实例化一些标准的 ...

  7. 分析一个简单的WPF程序

    1.新建WPF项目 使用Visual Studio 代码编辑器点击新建项目,选择 WPF应用后点击下一步: 在新窗口中我们填写项目名称.选择项目位置后点击创建就完成了WPF项目的创建. 2.WPF项目 ...

  8. 我的第一个wp8小程序

    一:截图,功能介绍:点击音乐红色按钮,播放铃声 二:代码 XAML代码 <phone:PhoneApplicationPage x:Class="PhoneApp1.MainPage& ...

  9. XamlReader 动态加载XAML

    原文:XamlReader 动态加载XAML XAML: <Grid xmlns:x="http://schemas.microsoft.com/client/2006" x ...

  10. WPF之命名空间和资源

    1.参考: https://msdn.microsoft.com/zh-cn/library/ms747086(v=vs.110).aspx http://www.cnblogs.com/cww201 ...

随机推荐

  1. Linux文件IO之一 [补档-2023-07-21]

    Linux文件IO 8-1C标准库IO函数的工作流程 ​ 使用fopen函数打开一个文件,之后会返回一个FILE* fp指针,fp指针指向一个结构体,这个结构体是c 标准io库中的一个结构体,这个结构 ...

  2. iOS视频播放常用重点知识

    iOS视频播放常见的重要知识点如下: 视频格式:iOS支持的视频格式主要有H.264.MPEG-4.H.263.Sorenson等.它们根据不同的应用场景进行使用. 视频编解码:视频编解码技术是视频播 ...

  3. Redis的Java客户端-Jedis

    Redis的Java客户端-Jedis 在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/ 其中Java客户端也包含很多: 标记为的就是推荐使 ...

  4. 17.3 给内存映射文件指定基地址--《Windows核心编程》

    可以使用 MapViewOfFileEx 函数,建议系统把文件映射到指定的地址. 其他参数与 MapViewOfFile 相同,最后一个参数 pvBaseeAddress 指定目标地址.同 Virtu ...

  5. 《ASP.ENT Core 与 RESTful API 开发实战》-- 读书笔记(第2章)

    第 2 章 .NET Core 和 ASP.NET Core 2.1 .NET Core 简介 .NET Core 是一个通用的开发平台,最重要的特点是跨平台,同时也是一个开源平台 .NET Core ...

  6. Trino-登录WebUI页面报错,日志中提示:404 Not Foud. (Zookeeper占用8080端口,与Trino的端口冲突)

    问题描述 启动Trino客户端执行show catalogs时报错:Error starting query at http://localhost:8080/v1/statement returne ...

  7. OGG常用运维命令

    1. 管理(MGR)进程命令 INFO MANAGER         返回有关管理器端口和进程id的信息. START MANAGER       开启管理进程 STATUS MANAGER    ...

  8. 基于Doris构建亿级数据实时数据分析系统

    转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南 背景 随着公司业务快速发展,对业务数据进行增长分析的需求越来越迫切,与此同时我们的业务数据量也在快速激增.每 ...

  9. NC22594 Rinne Loves Graph

    题目链接 题目 题目描述 Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些 ...

  10. NC51222 Strategic game

    题目链接 题目 题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he cannot ...