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书籍。。。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot采坑记录
springboot问题 前端thymeleaf,使用jar包模式运行后找不到页面解决方法: 代码中所有直接返回String进行页面跳转的改为使用ModelAndView 集成shiro之后自定义Realm中注入的service事务,缓存失效解决方法:在注入的service上增加@Lazy注解,原理请参考此博客 spring事件机制使用service继承ApplicationListener的方式处理事务导致项目启动报错 The bean 'xxx' could not be injected as a 'xxxx' because it is a JDK dynamic proxy that implements: org.springframework.context.ApplicationListener 有的人说需要在配
- 下一篇
【星云测试】开发者测试(2)-采用精准测试工具对J2EE Guns开发框架进行测试
配置测试Guns Guns简介Guns是一个近几年来基于SpringBoot的开源便利且较新的JavaEE项目开发框架,它整合了springmvc + shiro + mybatis-plus + beetl + flowable多项开源技术,致力于让Java后台开发更简洁快速 一,Guns的环境Guns 源码 Maven Eclipse-Photon JDK8 MySQL 安装环境 注:Eclipse和JDK的安装和安装包就用自己现有的就可以,星云测试将提供MySQL和Nodejs的安装包,但必须前提是用户自己的本机上不存在安装的MySQL和Nodejs脚本安装mysql和nodejs(一键安装) 1、解压星云提供TT_Soft安装包(例如D盘根目录,mysql和node的安装路径) 2、打开TT_Soft文件夹 3、以管理员身份运行TeststarsSoftInstall.exe 4、等待自动安装完成,窗口提示mysql初始化完成,关闭窗口 5、注销或重启电脑 6、使用net start mysql 命令启动MySQL服务 7、使用node –v查看node版本 二,...
相关文章
文章评论
共有0条评论来说两句吧...