- 浏览: 49970 次
- 性别:
- 来自: 厦门
文章分类
最新评论
不知道各位同行在创建第一个WPF应用程序时,由编译器自动生成的xaml代码,对于Window这个根节点处,有没有发现x:Class=""这样的字样没?还有在使用时有没有用到诸如x:Key=""或者x:Name=""等等。这些有一个共同点,那就是都以x开头。x是xaml名称空间的简称,映射的是http://schemas.microsoft.com/winfx/2006/xaml。它包含的类都是与解析XAML语言相关的,好了,让我们来见到的谈谈这所谓的x名称空间吧!
与C#一样,XAML也有自己独立的编译器。XAML会被解析和编译,最终形成微软的中间语言存储在程序集中。在解析和编译XAML的语言过程中,我们经常需要告诉编译器一些重要的信息,比如XAML代码的编译结果应该与哪个C#代码的编译器合并、使用XAML声明的元素师public还是private访问级别等等。这些让程序员能够与XAML编译器沟通的工具就存在x名称空间中。
在x名称空间下包含三种类型的工具:
一、Attribute类型的工具
二、标签扩展类型的工具
三、XAML指令元素类型的工具
下面我们就分别介绍一下吧!
一、x名称空间中的Attribue
提到Attribute,不由的想起我学习编程的时候,属性这个概念,在英文的技术文章中存在Attribute和Property这两个概念,用中文翻译都可以译为“属性”。既然都为“属性”那么它们之间有什么区别呢?通过查阅资料,有这样的解释:Attribute和Property是两个层面的东西,Attribute是语言层面上的东西,是给编译器看的,而Property是面向对象层面上的东西,是给编程逻辑用的。对于两者更贴切的翻译应该是Atrribute被译为“特征”,而Property被译为属性。好了,我们还是来看看x名称空间中的Attribute。
1、x:Class 这个Attribute的作用是告诉XAML编译器将XMAL标签的编译结果与后台代码中指定的类合并。使用该Attribute必须遵循一些要求:
- 该Atrribute只能用于xaml的根节点中
- 使用x:Class的根节点的类型要与x:Class的值所指示的类型保持一致
- x:Class的值所指示的类型在声明时必须使用partial关键字
示例代码如下:
前台的xaml代码:
<Window x:Class="WpfApplication3.Window9" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window9" Height="300" Width="300">
后台的cs代码:
public partial class Window9 : Window { public Window9() { InitializeComponent(); List<Student> students = new List<Student>(){ new Student(){Id=1,Name="Tim",Age=21}, new Student(){Id=2,Name="Tom",Age=22}, new Student(){Id=3,Name="Jim",Age=23} }; this.listBox1.ItemsSource = students; //this.listBox1.DisplayMemberPath = "Name"; Binding bind = new Binding("SelectedItem.Name") { Source = this.listBox1 }; this.textBox1.SetBinding(TextBox.TextProperty, bind); } }
2、x:ClassModifier 这个Attribute的作用是告诉XAML编译器生成的类是有什么样的访问修饰符修饰的。在使用该Attribute的时候必须注意:
- 使用该Attribute的标签必须具有x:Class Attribute
- x:ClassModifier的值必须与x:Class的值所指示的类型的访问修饰符保持一致
比如你在xaml代码中的Window标签中使用了x:ClassModifier="public",那么首先该标签中必须存在x:Class=""这样的Attribute-Value。同时xaml对应的cs代码这个类必须也是public的。
3、x:Name 关于这个Attribtue,我给它的定义就相当于一个人的名字,用于区分。举这样一个例子吧!如果现实生活中,一位老师第一次到一个班去上课,此时她没有同学们的资料,这样你能分别出各位同学吗?如果老师有同学们的资料,那么老师可以根据念姓名来找到对应的同学,那x:Name就有这样的作用了!
x:Name的作用有两个:
- 告诉XAML编译器,当一个标签带有x:Name属性时,除了为这个标签生成对应的实例外还为这个实例声明一个引用变量,变量名就是x:Name的值
- 如果设置了x:Name的标签具有Name的属性,那么将Name属性的值设为x:Name的值,并把这个值注册到UI树上,以达到方便查找的目的
4、x:FieldModifier 关于这个Attribute,是用来设置引用变量的访问修饰符的。但是必须在使用了x:Name的标签中使用x:FieldModifier属性。因为x:FieldModifier对应的值是为x:Name所生成的引用变量设置访问修饰符的。
5、x:Key 在任何的xaml中我们都可以定义Resource,我们可以提取一些内容放置在Resource中,当然每种内容都必须有自己独特的标识,那x:Key就是这个作用了,在使用某种内容时,我们就可以根据x:Key 来检索对应的资源了。
6、x:Shared 在利用Attribute x:Key检索对象时,都会得到一个对象,如果所检索的对象未使用x:Shared标签,那么第一次检索对象时得到一个对象,当第二次使用时那么只能得到第一次检索对象的一个副本。不断的使用同一检索对象,在内存中副本就会增加,同时也加大了内存的消耗。如果所检索的对象中使用了x:Shared="true"标签,那么不管重复使用多次所检索的对象,都是使用的同一个对象。这就减少了内存的消耗了!
发表评论
-
获取WPF所有控件的模板内容
2013-04-03 15:13 10281. 首先创建XMAL文件 <Windo ... -
委托回调函数的妙用(c# code )
2013-04-03 15:14 1430//person类 public class ... -
DynamicResource与StaticResource的区别
2013-02-20 14:28 0DynamicResource与StaticRes ... -
依赖属性--WPF
2013-02-20 14:27 0/// <summary> / ... -
简单的上传图片
2013-02-20 14:26 0<%@ Page Title="" ... -
C#获取文件夹下所有文件
2013-02-20 14:25 0string fileInfo = string.Empty ... -
如何将input type="file"显示的"浏览" 变成英文的?
2013-02-20 14:25 0解决方法: 方法一:使用英文Windows系统(这 ... -
asp.net mvc 2.0相关的一些内容
2013-02-20 14:24 01.搜索用到ViewTemp[]的时候,要用COOKIE去 ... -
WPF datagrid 弹出右键菜单时先选中该项
2013-02-20 14:23 0privatevoid datagrid_Previ ... -
显示动态的大小写提示框
2013-02-20 14:18 0function detectCapsLock(event) ... -
C# Action<T> 使用
2013-02-20 14:18 0在使用 Action<T> ... -
字符串SubCutString
2013-02-20 14:15 751public static string SubCutStr ... -
正则表达式-关于字符在100以内的字
2013-02-20 14:15 1127^.{0,100} $ 关于字符在100以内的字 ... -
WPF,TextBlock ,ToolTip 显示
2013-02-20 14:14 1146<TextBlock Text="{Bind ... -
后台运行点击事件
2013-02-20 14:13 616button.RaiseEvent(new Route ... -
为你解惑之WPF经典9问详解 .
2013-01-08 15:20 1219第0问:能否简单介绍一 ... -
WPF中DataGrid的使用 .
2013-01-08 15:21 1643DataGrid是WPF中的数据显 ... -
WPF中TreeView的使用 .
2013-01-08 15:21 2179不管是在窗体程序开发还是在web应用程序开发中,大家都知道树这 ... -
浅谈WPF中x名称空间(二) .
2012-04-13 13:43 1175二、x名称空间中的标记 ... -
C#正则表达式
2012-04-13 12:41 828(1)“@”符号符下两ows表研究室的火热,当晨在“@”虽然并 ...
相关推荐
WPF远程桌面AxInterop.MSTSCLib.dll Interop.MSTSCLib.dll DEMO
WPF_JJDown_v1.234.0
[专业WPF用户界面控件].Actipro.WPF.Studio.v11.1.0541.Incl.Keygen-Lz0 激活码!!!!!!!!!!!!
WPF入门.rar WPF入门.rar WPF入门.rarWPF入门.rar WPF入门.rar WPF入门.rar
WPF HelixToolkitWPF 中文手册 HelixToolkitWPF中文手册.pdf
在客户端的Settings.settings配置文件里添加一条Themes键,类型为string,值为相应的主题文件夹名称如WhistlerBlue。 使用时在启动窗体的loaded事件里添加一行 WPF.Themes.ThemeManager.ApplyTheme(Application....
wpfx.org-Notepad.rar
wpfx.org-HBuilder.zip
xceed.wpf.toolkit库
书名《WPF深入浅出》,很经典的WPF学习资料,国人写的因此不存在二次翻译问题。高清扫描版本,不存在外部链接,具有章节详细书签。
LoadingIndicators.WPF, WPF加载指示器的集合 LoadingIndicators.WPF LoadingIndicators.WPF 是 8个用于WPF的动画加载指示器,与 MahApps.Metro 兼容。样式弧线弧形环双弹跳FlipPlane脉冲响铃三点
WPF 24小时自学教程 Teach.Yourself.WPF.in.24.Hour
Telerik RadControls for WPF 4.0 2011 Q3 V2011.3.1116 源代码
详谈WPF开发中的数据虚拟化1. WPF控件开发之控件概述2. 使用XAML创建按钮3. WPF控件库之BUTTON1164. WPF控件库之MENU1175. WPF控件库之LABLE 6. WPF控件库之TOOLBAR 7. WPF控件开发之自定义控件8. WPF控件开发之...
WPF基于Vlc.DotNet.Wpf封装的视频播放器
DotNetBar.for.WPF.v5.9.0.0-AHCU
关于VS2010编译WPF编译器错误CS1566g.resources出错的终极解决
WPF源码:只读依赖属性.rar WPF源码:只读依赖属性.rar
Actipro.WPF.Studio.v11.2.0552.Incl.Keygen-Lz0
6. WPF名称范围 92 WPF控件开发 95 1. WPF控件开发之控件概述 95 2. 使用XAML创建按钮 103 3. WPF控件库之BUTTON 114 4. WPF控件库之MENU 115 5. WPF控件库之LABLE 119 6. WPF控件库之TOOLBAR 121 7. WPF控件开发之...