WPF之X名称空间学习
原文:WPF之X名称空间学习

WPF的X名称空间都有什么呢?首先,盗用张图来说明:

我将就图表中的内容进行总结:

1、x:Array具有一个Iteams属性,它能暴漏一个ArratList实例,ArratList实例的内部成员类型由x:Array的Type指明。

<Window x:Class="X名称空间详解.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:X名称空间详解"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid Background="LightBlue"><ListBox FontSize="20" Margin="20"><ListBox.ItemsSource><x:Array Type="sys:String"><sys:String>jack</sys:String><sys:String>joson</sys:String><sys:String>tom</sys:String></x:Array></ListBox.ItemsSource></ListBox></Grid>
</Window>

2、x:Class的作用是告诉XAML编译器将XAML标签的编译结果与后台c#代码合并,所以C#代码中有了partial。

3、x:ClassModifier的作用是告诉XAML编译器标签编译生成的类具有怎样的访问级别。给<Window>标签加上x:ClassModifier="internal"。直接编译会产生编译错误,需要找到C#代码将标签对应合并的类的访问控制级别由public改成internal。

4、x:Code的作用是可以将c#代码放在前置的XAML代码中。

<Window x:Class="X名称空间详解.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:X名称空间详解"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid Background="LightBlue"><Button Width="100" Height="30" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,20,0,0" Click="Button_Click"></Button></Grid><x:Code><![CDATA[private void Button_Click(object sender, RoutedEventArgs e){MessageBox.Show("happy new year!");}]]></x:Code>
</Window>

5、x:FieldModifier、x:Name、x:Key

x:FieldModifier与x:Name用在标签里,x:Name表示控件的引用。有了x:Name,就可以在c#代码中直接获取控件,如textBox1.Text就能获取到textBox1的值,x:FieldModifier表示控件的引用变量的访问级别。在默认情况下,这些控件的x:FieldModifier被封装成internal,下面将textBox1的x:FieldModifier设置成public后可以在另一个程序集中引用这个控件元素。

在MainWindow的添加了一个string条目,并用x:key标记,这样可以在XAML和c#代码中多次使用这个字符串。

XAML中使用Text="{StaticResource ResourceKey=myString}"

c#代码中使用string str = this.FindResource("myString") as string;

<Window x:Class="X名称空间详解.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:X名称空间详解"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Window.Resources><sys:String x:Key="myString">Hello world</sys:String></Window.Resources><Grid Background="LightBlue"><TextBox x:Name="textBox1" x:FieldModifier="public" HorizontalAlignment="Left" Width="100" Height="30">hello</TextBox><TextBox x:Name="textBox2" Text="{StaticResource ResourceKey=myString}" HorizontalAlignment="Right" Width="100" Height="30"></TextBox></Grid>
</Window>

6、x:Shared。。学习x:key的时候我们已经了解到,如果把某个对象作为资源放入资源字典里后我们就可以把它们检索起来重复使用。那么每当我们检索到一个对象,我们得到的究竟是同一个对象呢,还是这个对像的一个副本呢?这就要看我们为x:Shared赋什么值了。x:Shared一定要与x:Key配合使用,如果x:Shared值为true,那么每次检索这个对象的时候,我们得到的都是同一个对象,反之,我们得到的就是这个对象的一个副本。默认这个值是true。也就是说我们使用的都是同一个对象。

7、x:Type的值应该是一个数据类型的名称,Type是对数据类型的抽象,例如一个类、string、int、结构、枚举等都是数据类型。当在XAML中想表达某个数据类型的时候就需要使用x:Type标记扩展了。

首先,创建一个窗体

<Window x:Class="X名称空间详解.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:X名称空间详解"mc:Ignorable="d"Title="Window1" Height="300" Width="300"><StackPanel Background="LightBlue"><TextBox Margin="20"></TextBox><TextBox Margin="20"></TextBox><TextBox Margin="20"></TextBox><Button Content="ok" Margin="20"/></StackPanel>
</Window>

然后创建一个MyButton类,继承自Button,如果UserWindowType在类初始化的时候赋了上面的窗体,那么触发MyButton的click事件时会弹出上面的窗体。

    class MyButton : Button{public Type UserWindowType { get; set; }protected override void OnClick(){base.OnClick();//激发click事件Window win1 = Activator.CreateInstance(this.UserWindowType) as Window;if (win1 != null){win1.ShowDialog();}}}

最后在主窗体的XAML中使用,下面的x:Type 就起到了指明UserWindowType的数据类型的作用。单击这个MyButton就会跳出Window1窗体。

<local:MyButton  Content="Show" UserWindowType="{x:Type TypeName=local:Window1}" Width="100" Height="30"></local:MyButton>

8、x:Null与x:Type

这里讲到x:Null,并再次提到x:Type,加深对x:Type的理解。

null用来表示空值,x:Null用来在XAML中表示空值。

<Window x:Class="X名称空间详解.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:X名称空间详解"mc:Ignorable="d"Title="Window1" Height="300" Width="300"><Window.Resources><Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}"><Setter Property="Height"  Value="50"></Setter></Style></Window.Resources><StackPanel Background="LightBlue"><TextBox Margin="20" Height="30"></TextBox><TextBox Margin="20"></TextBox><TextBox Margin="20" Style="{x:Null}"></TextBox><Button Content="ok" Margin="20"/></StackPanel>
</Window>

9、x:Static

这是一个很常用的标记扩展,它的作用是在XAML文档中使用数据类型为static的成员。因为XAML不能编写逻辑代码。所以使用x:Static访问的static成员一定是数据类型的属性和字段。我们看如下一些例子:

  1. public Window4()
  2. {
  3. InitializeComponent();
  4. }
  5. public static string Test = "明月松间照,清泉石上流。";
  1. <Window x:Class="WpfApplication2.Window4"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:sys="clr-namespace:System;assembly=mscorlib"
  5. xmlns:local="clr-namespace:WpfApplication2"
  6. Title="Window4" Height="369" Width="675">
  7. <Grid>
  8. <Button Content="{x:Static local:Window4.Test}" Height="23" HorizontalAlignment="Left" Margin="128,12,0,0" Name="button3" VerticalAlignment="Top" Style="{x:Null}"/>
  9. </Grid>
  10. </Window>

10、x:XData

x:XData是一个专用标签。WPF把包含数据的对象称为数据源,用于把数据源中的数据提供给数据使用者的对象被称做是数据提供者,WPF中包含多种数据提供者,其中一个类名叫做XmlDataProvider实例,那么XmlDataProvider实例的数据就要放在x:XData的标签内容里。事例如下:

说明:这篇博文主要参考刘铁猛先生的深入浅出wpf书籍。。。

posted on 2018-08-23 17:42 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9525254.html

WPF之X名称空间学习相关推荐

  1. 【转】WPF XAML X名称空间详解

    转自:WPF XAML X名称空间详解_郎涯技术-CSDN博客 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML编译器将XAML代码编译为CLR代码. ...

  2. WPF XAML X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML编译器将XAML代码编译为CLR代码. [X名称空间里面到底都有些什么] x名称空间映射的是:http ...

  3. 《深入浅出WPF》——x名称空间

    文章目录 x名称空间 1. x名称空间里都有什么 2. x名称空间中的Attribute ⭐2.1. x:Class

  4. 分享Silverlight/WPF/Windows Phone一周学习导读(10月1日-10月15日)

    分享Silverlight/WPF/Windows Phone一周学习导读(10月1日-10月15日) 本周Silverlight学习资源更新: [Silverlight入门系列]ListboxIte ...

  5. [No000013F]WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  6. WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  7. 2020 我的C++的学习之路 第九章 内存模型与名称空间

    以C++ Primer Plus为参考书籍,自身归纳知识点,加深记忆. 内存模型与名称空间 存储持续性 作用域与链接 自动存储持续性 静态持续变量 静态持续性.外部链接性 静态持续性.内部链接性 静态 ...

  8. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数

    一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址print('from func')print(func)age=1 ...

  9. C++ Primer Plus学习(九)——内存模型和名称空间

    内存模型和名称空间 单独编译 存储持续性.作用域和链接性 名称空间 单独编译 程序一般可以分为三部分: 头文件:包含结构声明和使用这些结构的函数的原型: 源代码文件:包含与结构有关的函数的代码: 源代 ...

最新文章

  1. 2019年「自然语言处理NLP」的“高光时刻” --- 28篇标志性论文
  2. hplus java,hplus
  3. 关于 继承、扩展和协议,深度好文
  4. RocketMQ的Producer详解之分布式事务消息(代码实现以及过程分析)
  5. 网站负责人委托书_关于网站负责人授权委托书的阿里云网站内容
  6. bootstrap bootstraptable 固定列_1个Excel公式按条件自定义格式显示固定电话号码
  7. 导入和作用域 #596
  8. HTML5的File API
  9. mysql在windows配置多节点_Windows环境配置MySQL集群
  10. SQL数据库面试题以及答案(50题)
  11. Linux命令大全(在线手册)
  12. MySQL 中STD、STDDEV、STDDEV_SAMP 标准差函数的区别
  13. Java Spider介绍
  14. 投资理财(待更新,仅供个人使用)
  15. 全国青少年软件编程(Scratch)一级2019考试测试卷最后一道编程题!
  16. 基于OLT(实体、关系、标签)建模方法论的最佳实践 | StartDT Tech Lab 08
  17. 计算机bios所以的英文翻译,电脑各种BIOS中英文对照翻译
  18. Word 突出显示 快捷键
  19. YouTube和Vimeo视频的播放和暂停按钮(通过其API)
  20. 人工智能领域期刊总结

热门文章

  1. .NET Core Web API:您需要了解的最少知识(第2部分,共2部分)
  2. Element 2.13.0 发布,基于 Vue 的桌面端组件库
  3. 在MVC 6 .NET核心应用程序中添加种子数据
  4. 引入react文件报错_react.js引入router文件后报错
  5. ubuntu 重装 nvidia_时隔三个月 NVIDIA为何再次打破AI推理性能记录
  6. php序列化 java对象,在Java中反序列化一个序列化的php对象
  7. RuoYi框架使用手册
  8. vscode有时候不能注释_给大伙儿盘几个提效/创意的 vscode 插件
  9. 注册名字英文name域名_关于域名和备案,你想知道的都在这里
  10. ueditor 上传html文件,UEditor Flash文件上传