【转】9、XAML名称空间详解
转自:9、XAML名称空间详解 - 种花生的读书人 - 博客园
XAML命名空间
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> </Window> xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间映射许多当前*.xaml文件使用的WPF.NET命名空间。这个一对多的映射其实使用程序集级别的 [XmlnsDefinition]特性硬编码在WPF程序集中。例如导入System.Windows命名空间: [asembly:XmlnsDefinition(“http://schemas.microsoft.com/winfx/2006/xaml/presentation”)]
另外可以使用clr-namespace和assembly标记建立一个自定义的XML命名空间,使其映射到自定义库。 xmlns:myCtrls="clr-namespace:MyControls;assembly=MyControls"
X名称空间里的成员(如X:Class、X:Name)是专门写给XAML编译器看、用来引导XAML编译器把XAML代码编译成CLR代码的。
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4.2x名称空间中的Attribute
4.2.1x:Class的作用是告诉XAML编译器将XAML标签的编译结果与后台中的指定类合并,使用x:Class时必须遵循以下要求:
*这个Attribute只能用于根结点
*使用x:Class的根结点的类型要与x:Class的值所指示的类型保持一致
*x:Class的值所指示的类型在声明时必须使用partial关键字
<Window x:Class="将窗体设为透明1.MainWindow"根结点
public partial class MainWindow : Window 保持一致 partial关键字 4.2.3x:Name XAML的标签声明的是对象,一个XAML标签对应一个对象,这个对象一般是一个空间类的实例。 x:Name的作用有两个:(1)告诉XAML编译器,当一个标签带有x:Name时除了为这个标签生成对应的实例外还要为这个实例声明一个引用变量,这个变量名就是x:Name的值(2)将XAML标签所对应的对象的Name属性也设置为x:Name的值,并把这个值注册到UI树上,以方便查找。 使用x:Name后,XAML标签对应的实例就具有了自己的引用变量,而且这些引用变量都是类的字段。
<Grid><TextBox Width="100"Margin="5"HorizontalAlignment="Left"VerticalAlignment="Top" /><Button Margin="5"HorizontalAlignment="Right"VerticalAlignment="Bottom"Click="Button_Click"Content="OK" /></Grid>
private void Button_Click(object sender, RoutedEventArgs e){Grid grid1 = this.Content as Grid;//MainWindow.Content属性引用着Grid的实例,而Grid的实例的Children[0]又引用着TextBox的实例TextBox textBox = grid1.Children[0] as TextBox;if (string.IsNullOrEmpty(textBox.Text)){textBox.Text = "hello";}else{textBox.Text = textBox.Name;}}
代码简写过程
<StackPanel Background="Gray"><StackPanel.Children><!--可以简写掉,后台可通过Children属性遍历控件--><TextBox Margin="5"/><TextBox Margin="5"/><Button Margin="5"/></StackPanel.Children></StackPanel> 4.2.4 x:FieldModifier:用来改变引用变量的访问级别
<TextBox Margin="5" x:FieldModifier="public" /> <TextBox Margin="5" x:FieldModifier="private" />
4.2.5 x:Key x:Key的作用就是为资源贴上用于检索的索引,在WPF中几乎每个元素都有自己的Resource属性, 这个属性是个“Key-Value”式的集合, 只要把元素 放进这个集合,这个元素就成为资源字典中的一个条目。
<Window.Resources><sys:String x:Key="myString">Hello WPF</sys:String></Window.Resources> 在XAML中访问资源<TextBox Margin="5" Text="{StaticResource ResourceKey=myString}" />
在C#中访问资源 private void Button_Click_1(object sender, RoutedEventArgs e){string str = this.FindResource("myString") as string;this.textBox2.Text = str;} 4.2.6 x:Shared:在学习x:Key时我们知道一旦我们把某些对象当作资源放进资源字典里后就可以把它检索出来重复使用, 那么,每当我们检索到一 个对象的时候,到底得到的是同一个对象,还是对象的副本呢?这就要看我们给x:Shared赋什么值了。 x:Shared一定要与x:Key配合使用, 如果x:Shared的值为true,那么得到的是同一个对象,否则x:Shared的值为false, 得到的是这个对象的一个副本。默认情况下,XAML编译器会 为资源隐藏地添加x:Shared=“true”, 也就是说,默认情况下我们得到的都是同一个对象。 4.3 x名称空间中的标记扩展 4.3.1 x:Type:其值是一个数据类型的名称
class MyButton:Button{public Type UserWindowType { get; set; }protected override void OnClick(){base.OnClick();Window win = Activator.CreateInstance(this.UserWindowType) as Window;if (win != null){win.ShowDialog();}}}
<StackPanel Background="Gray"><StackPanel.Children><!-- 可以简写掉,后台可通过Children属性遍历控件 --><TextBox Margin="5" Text="{StaticResource ResourceKey=myString}" /><TextBox x:Name="textBox2" Margin="5" /><!-- <Button Margin="5" Click="Button_Click_1" /> --><Button Content="OK" /></StackPanel.Children></StackPanel>
<Window x:Class="_4._2.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:_4._2"Title="Window1"Width="300"Height="300"><Grid><local:MyButton Margin="5"Content="Show"UserWindowType="{x:Type TypeName=local:MainWindow}" /></Grid> </Window>
4.3.2 x:Null:显式地对一个属性赋一个空值,在C#语言中null表示空值,在XAML里x:Null表示空值
<Window.Resources><Style x:Key="{x:Type Button}" TargetType="{x:Type Button}"><Setter Property="Width" Value="60"/><Setter Property="Height" Value="36"/><Setter Property="Margin" Value="5"/></Style></Window.Resources><StackPanel><Button Content="OK"/><Button Content="OK"/><Button Content="OK"/><Button Content="OK" Style="{x:Null}"/></StackPanel>
<Button Content="Hello"><Button.Style><x:Null/></Button.Style></Button>
4.3.4 x:Array作用就是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明。
<ListBox Margin="5"><ListBox.ItemsSource><x:Array Type="sys:String"><sys:String>Trim</sys:String><sys:String>Tom</sys:String><sys:String>Vitor</sys:String></x:Array></ListBox.ItemsSource></ListBox> 4.3.5 x:Static 是在XAML文档中使用数据类型的static成员,因为在XAML中不能写逻辑代码
public static string WindowTitle = "山高水长";public static string ShowText { get { return "水落石出"; } }
xmlns:local="clr-namespace:统一设置一组控件的样式"
<TextBlock Text="{x:Static local:MainWindow.ShowText}"/>
4.4 XAML指令元素
x:Code 作用就是可以包含一些本应放置在后置代码中的C#代码,,好处是代码在同一个文件中,不好的地方是不便于以后的扩展x:XData 把包含数据的对象成为数据源,用于把数据源中的数据提供给数据使用者的对象被称为数据提供者(Data Provider)
<Window.Resources><XmlDataProvider x:Key="MyData" XPath="Properties/Fruits"><x:XData><Supermarket xmlns=""><Fruit><Fruit Name="Peach"/><Fruit Name="Banana"/><Fruit Name="Orangle"/></Fruit><Drinks><Drink Name="Coca Cola"/><Drink Name="PEPSI Cola"/></Drinks></Supermarket></x:XData></XmlDataProvider></Window.Resources>
【转】9、XAML名称空间详解相关推荐
- 9、XAML名称空间详解
XAML命名空间 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmln ...
- 【转】WPF XAML X名称空间详解
转自:WPF XAML X名称空间详解_郎涯技术-CSDN博客 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML编译器将XAML代码编译为CLR代码. ...
- WPF XAML X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML编译器将XAML代码编译为CLR代码. [X名称空间里面到底都有些什么] x名称空间映射的是:http ...
- [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命名空间对应的就是这一条语句:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",它包含的类 ...
- Oracle表空间_PK是什么意思,Oracle表空间详解
关键字:Oracle表空间详解 一.============ 查询 =================== 1.查询oracle用户的默认表空间和临时表空间 select default_table ...
- oracle offline 删除表,Oracle offline 表空间详解
表空间详解 一.Offline的整体效果:offline以后,未完成的事物可以提交或回滚,但不能发起新的事物,也不能进行查询. 二.Offline的语法: ALTER TABLESPACE table ...
- oracle中表空间详解
oracle与其他数据库不同的地方就是表空间设计.表空间可以将oracle数据库划分为多个逻辑区域,这有点像MySQL中的create database的感觉.在一个oracle数据库中能够有一个或多 ...
最新文章
- solidworks api二次开发实例详解_Solidworks开发语言对比及分析
- MSSQL 漏洞利用与提权
- 在ubuntu 11.10 64位 上安装adobe flash player
- go get 的不再src目录中_Go 每日一库之 sqlc:根据 sql 生成代码
- mysql数据库应用的权限层级_涂抹MySQL--第5章 MySQL数据库中的权限体系 - 5.3权限级别(1)...
- 安装centos linux7,安装centos7
- java并发编程的艺术——第四章总结
- 推荐参考文献元数据挖掘的几篇论文
- 中端存储如何摆脱“创新的窘境”
- 深度解读 - TDD(测试驱动开发)
- 指派问题的遗传算法求解 Java实现
- 百旺如何看是否清卡_百旺税控盘会自动清卡吗
- html 心形字符,心形符号大全
- 超小型模块:IDO-SOM2D01可应用于物联网智能网关等领域
- Java性能优化从20s优化到500ms,我用了这三招,内容知识满满
- 特斯拉又撞“人”了 汽车激光雷达“盛宴”开启
- 当年也是翩翩少年,如今落得秃顶大叔,程序员秃顶算工伤吗?
- 选来选去,最终决定把家安在这里。现在看来还没有什么问题。
- 接口测试用例设计方法方式和流程一文到底
- 数组下标越界解析(以C语言为例)