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名称空间详解的更多相关文章
- 深入浅出WPF-04.x名称空间详解
x名称空间详解 几个需要特别说明的名称空间: x:Class 用来标记XAML和后台代码之间的合并关系.x:Class根节点的类型必须和x:Class值指向的类型保持一致.x:Class的值指向的类型 ...
- WPF读书笔记 x名称空间详解(第二天)
每天看一点,每天进步一点. x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与解析XAML语言关,亦可称为"XAML名 ...
- [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 名称空间详解
名称 种类(默认Attribute) 备注 x:Array 标记拓展 可作为 ListBox.ItemsSource 的值 x:Class 指定与 .cs 中哪个类合并,所指示的类型在声明时使用 pa ...
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
- X--名称空间详解
转自:http://blog.csdn.net/lisenyang/article/details/18312039 X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的. ...
- ORACLE结构体系篇之表空间详解.md
表空间详解一.系统表空间SYSTEM 表空间是Oracle 数据库最重要的一个表空间,存放了一些DDL 语言产生的信息以及PL/SQL 包.视图.函数.过程等,称之为数据字典,因此该表空间也具有其特殊 ...
- WAL日志文件名称格式详解
转自:http://blog.osdba.net/534.html WAL日志文件名称格式详解 PostgreSQL的WAL日志文件在pg_xlog目录下,一般情况下,每个文件为16M大小: osdb ...
随机推荐
- Gstreamer基本概念介绍(开发前必读)
1. 元件(Elements) 元件(element)是GStreamer中最重要的概念.你可以通过创建一系列的元件(Elements),并把它们连接起来,从而让数据流在这个被连接的各个元件(Elem ...
- [转]oracle 11g 忘记 默认用户密码
本文转自:http://blog.csdn.net/huangbiao86/article/details/6595052 首先启动sqlplus 输入用户名:sqlplus / as sysdba ...
- hdu 4725 最短路
思路:将每个layer拆成两个点,编号为N+x,和N+N+x.对所有属于layer x的点i,建N+x到i的有向边,在建i到N+N+x的有向边.最后对所有x号layer和x+1建一条N+N+x到N ...
- Unity之坐标转换
1.世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标.其中camera为场景中的camera对象. 2. ...
- sql分割以逗号隔开的字符串
--创建存储过程 IF EXISTS (SELECT * FROM sysobjects WHERE name='GetSplitString' AND xtype='p') DROP PROCEDU ...
- Sharepoint 2013 安装部署系列篇 第二篇 -- SQL集群安装
第一部分 系统集群安装. 第三部分 安装和配置网络负载均衡在前端web服务器 第四部分 安装和配置sharepoint 场(三层拓扑部署) 以下图片均为sharepoint 2010..由于本人的笔记 ...
- c#中的方法的定义和运用
首先,理解下,函数和方法: 其实两者是一样的,只是个叫法不同. C#中叫做Method,中文叫方法: C++中称为Function,中文叫函数. 函数是Function,多指以前面向过程编程时候,将逻 ...
- java模拟有验证码的Http登陆
所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...
- UINavigationController与UITabbarController的样式
之前虽然也手写过这两中视图控制器,但是更多的还是使用SB来创建,最近发现了一些问题,现在总结一下. 1.改变UINavigationBar的颜色 在UINavigationController中,之前 ...
- IoC容器的初始化过程
1.简单来说,IoC容器的初始化是由前面介绍的refresh()方法来启动的,这个方法标志着IoC容器的正式启动. 2.具体来说,这个启动包括BeanDefinition的Resource定位.载入和 ...