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成员一定是数据类型的属性和字段。我们看如下一些例子:
- public Window4()
- {
- InitializeComponent();
- }
- public static string Test = "明月松间照,清泉石上流。";
- <Window x:Class="WpfApplication2.Window4"
- 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:local="clr-namespace:WpfApplication2"
- Title="Window4" Height="369" Width="675">
- <Grid>
- <Button Content="{x:Static local:Window4.Test}" Height="23" HorizontalAlignment="Left" Margin="128,12,0,0" Name="button3" VerticalAlignment="Top" Style="{x:Null}"/>
- </Grid>
- </Window>
10、x:XData
x:XData是一个专用标签。WPF把包含数据的对象称为数据源,用于把数据源中的数据提供给数据使用者的对象被称做是数据提供者,WPF中包含多种数据提供者,其中一个类名叫做XmlDataProvider实例,那么XmlDataProvider实例的数据就要放在x:XData的标签内容里。事例如下:

说明:这篇博文主要参考刘铁猛先生的深入浅出wpf书籍。。。
WPF之X名称空间学习的更多相关文章
- 《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记
C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用 ...
- WPF 基础 - x 名称空间详解
名称 种类(默认Attribute) 备注 x:Array 标记拓展 可作为 ListBox.ItemsSource 的值 x:Class 指定与 .cs 中哪个类合并,所指示的类型在声明时使用 pa ...
- [No000013F]WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- WPF x名称空间
X是映射XML名称空间时给他取的名字.X名称空间里面的成员是专门给XAML编译器看的.用来引导XAML编译器把XAML代码编译成CLR代码的,他是取的XAML的首字母X. XAML有自己的编译器,会吧 ...
- WPF读书笔记 x名称空间详解(第二天)
每天看一点,每天进步一点. x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与解析XAML语言关,亦可称为"XAML名 ...
- 在编写wpf界面时候中出现如下错误: 类型引用不明确。至少有两个名称空间(“System.Windows”和“System.Windows”)中已出现名为“VisualStateManager”的类型。请考虑调整程序集 XmlnsDefinition 特性。
wpf中类型引用不明确.至少有两个名称空间(“System.Windows”和“System.Windows”)中已出现名为“VisualState 你是不是用了WPFToolKit?如果是的,那原因 ...
- wpf多程序集之间共享资源字典--CLR名称空间未定义云云
wpf多程序集之间共享资源字典--CLR名称空间未定义云云 分类: WPF 2012-10-28 10:57 1162人阅读 评论(0) 收藏 举报 以下介绍如何创建可用于在多个程序集之间共享的资源字 ...
- 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...
随机推荐
- Tensorflow学习笔记(1)--安装
安装 1.ubuntu 14.04 2. 清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/tensorflow/ (要求sudo权限,如果报 ...
- 【转】dmesg 时间转换
dmesg 时间转换 dmesg 输出的格式不易查看,可以通过命令进行转换. 记录如下: 时间查看: date -d "1970-01-01 UTC `echo "$(date + ...
- Java技术路线
1.计算机基础: 1.1数据机构基础: 主要学习: 1.向量,链表,栈,队列和堆,词典.熟悉 2.树,二叉搜索树.熟悉 3.图,有向图,无向图,基本概念 4.二叉搜索A,B,C类熟练,9大排序熟悉. ...
- 基于R语言的数据分析和挖掘方法总结——中位数检验
3.1 单组样本符号秩检验(Wilcoxon signed-rank test) 3.1.1 方法简介 此处使用的统计分析方法为美国统计学家Frank Wilcoxon所提出的非参数方法,称为Wilc ...
- https网站无法加载http路径的js和css
在https的网站中引用http路径的js或css会导致不起作用,其形如: <script src="http://code.jquery.com/jquery-1.11.0.min. ...
- 友盟分享适配iOS9
在新发布的iOS9系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理: 1. HTTP传输安全 以iOS9 SDK编译 ...
- maven创建web工程Spring配置文件找不到
使用maven创建web工程,将Spring配置文件applicationContext.xml放在src/resource下,用eclipse编译时提示class path resource [ap ...
- freemarker入门实例与源码研究准备工作
首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的 ...
- Logistic回归python实现
2017-08-12 Logistic 回归,作为分类器: 分别用了梯度上升,牛顿法来最优化损失函数: # -*- coding: utf-8 -*- ''' function: 实现Logistic ...
- HDU 5992 kd-tree
还记得青岛的时候和蕾姐讨论了近三个小时也不知道这是什么东西 后来发现是kdtree 于是拖到寒假才补这个算法 写完几道模板题发现多维的kdtree查找最近也是很简单的拓展 于是很快1A了这道题 它真的 ...