x名称空间中的标记拓展
1.x:Type
Type类可作为所有数据类型在编程层面上的抽象。在XAML中,如果想表达某个数据类型时就需要使用x:Type标记拓展。例子:
创建一个Button的派生类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls; namespace WpfApplication3
{
class MyButton:Button
{
public Type UserWindowType { get; set; }
protected override void OnClick()//是protected,不是public
{
base.OnClick();//激发Click事件
Window win = Activator.CreateInstance(this.UserWindowType) as Window;
if (win != null)
{
win.ShowDialog();
}
}
}
}
添加一个MyWindow:
<Window x:Class="WpfApplication3.MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStartupLocation="CenterScreen"
Title="MyWindow" Height="170" Width="200">
<Grid>
<StackPanel Background="LightBlue">
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<Button Content="OK" Margin="5"></Button>
</StackPanel>
</Grid>
</Window>
再编写MainWindow:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication3"
WindowStartupLocation="CenterScreen"
Title="MainWindow" Height="300" Width="300">
<!--xmlns:local="clr-namespace:WpfApplication3"引入命名空间WpfApplication3,并映射为local-->
<Grid>
<StackPanel>
<local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:MyWindow}" Margin="5"></local:MyButton>
</StackPanel>
</Grid>
</Window>
2.x:Null
显示地对一个属性赋一个空值
例子:
MainWindow:
<Window x:Class="xNull.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="x:Null Sample" Height="300" Width="300">
<Window.Resources>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
<Setter Property="Width" Value="60"></Setter>
<Setter Property="Height" Value="36"></Setter>
<Setter Property="Margin" Value="5"></Setter>
</Style><!--设置Button控件的默认Style-->
</Window.Resources>
<Grid>
<StackPanel>
<Button Content="0K"></Button>
<Button Content="0K"></Button>
<Button Content="0K"></Button>
<Button Content="OK" Style="{x:Null}"></Button><!--显示地把Style设置为x:Null了-->
</StackPanel>
</Grid>
</Window>
效果:
3.标记扩展实例的两种声明语法
上面的例子,可以写成:
<Button Content="OK">
<Button.Style>
<x:Null />
</Button.Style>
</Button>
这样写,代码显得有些啰嗦,所以为了保持简洁,很少使用这样的写法
4.x:Array
x:Array的作用就是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明
例子:
<Window x:Class="xArray.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"
Title="MainWindow" Height="120" Width="160">
<!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"-->
<Grid>
<Grid Background="LightBlue">
<ListBox Margin="5" ItemsSource=“{x:Array Type=sys:String}”><!--类型为String-->
</ListBox>
</Grid>
</Grid>
</Window>
但如果这样写,是没有数据可以提供的,则改为标签声明语法:
<Window x:Class="xArray.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"
Title="MainWindow" Height="120" Width="160">
<!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"-->
<Grid>
<Grid Background="LightBlue">
<ListBox Margin="5">
<ListBox.ItemsSource>
<x:Array Type="sys:String"><!--类型为String-->
<sys:String>Tim</sys:String>
<sys:String>Tom</sys:String>
<sys:String>Victor</sys:String>
</x:Array>
</ListBox.ItemsSource>
</ListBox>
</Grid>
</Grid>
</Window>
结果为:
5.x:Static
在XAML文档中使用数据类型的Static成员
例子:
MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace xStatic
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static string WindowTitle = "高山流水";
public static string ShowText { get { return "水落石出"; } } public MainWindow()
{
InitializeComponent();
}
}
}
MainWindow.xaml
<Window x:Class="xStatic.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:xStatic"
Title="{x:Static local:MainWindow.WindowTitle}" Height="120" Width="300">
<!--把命名空间xStatic映射为local-->
<!--使用x:Static访问静态成员数据-->
<Grid>
<StackPanel>
<TextBox FontSize="32" Text="{x:Static local:MainWindow.ShowText}"></TextBox>
<!--使用x:Static访问静态成员数据-->
</StackPanel>
</Grid>
</Window>
结果:
6.XAML指令元素
XAML指令元素有两个:
x:Code
x:XData
1)x:Code的作用是,放置一些本应该放在后置代码中的C#代码。一般不会这样做,这样做,会是代码难以维护、不易于调试
2)x:XData是一个专用标签。如果想在XAML中声明一个带有数据的XmlDataProvider实例,那么XmlDataProvider实例的数据就应该放在x:Data标签的内容里,比如:
<Window.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
<x:XData>
<Supermarket xmlns="">
<Fruits>
<Fruit Name="Peach"/>
<Fruit Name="Banana"/>
<Fruit Name="Orange"/>
</Fruits>
<Drinks>
<Drink Name="Coca Cola"/>
<Drink Name="PEPSI Cola"/>
</Drinks>
</Supermarket>
</x:XData>
</XmlDataProvider>
</Window.Resources>
x名称空间中的标记拓展的更多相关文章
- x名称空间中的内容
原文:x名称空间中的内容 x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与XAML的解析有关,下面分三部分介绍 一:x名称空间 ...
- 9、XAML名称空间详解
XAML命名空间 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...
- Spring的2.5版本中提供了一种:p名称空间的注入(了解)
1. 步骤一:需要先引入 p 名称空间 * 在schema的名称空间中加入该行:xmlns:p="http://www.springframework.org/schema/p"( ...
- [No000013F]WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...
- WPF学习之X名称空间详解
X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...
- x名称空间
XAML代码的WPF程序都需要通过语句:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",x就是用来映射xmlns:x= ...
- C++ 名称空间
在程序中,只使用 using namespace std; 而不使用其他的名称空间,如using namespace boost; 这样的好处有: 1.可以避免不同名称空间中的名称冲突: 2.可以很清 ...
- 理解C#系列 / 核心C# / 名称空间
名称空间namespace 名称空间 名称空间用来逻辑分类,而不是物理上的,名称空间与程序集无关[程序集:经由编译器编译得到的文件],同一个程序集中可以有2不同的名称空间,也可以在不同的程序集中定义同 ...
随机推荐
- 获取元素CSS值之getComputedStyle方法熟悉
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2378 一.碎碎念~前 ...
- 不错的linux下通用的java程序启动脚本(转载)
转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...
- grads 绘制仿matlab色标效果
http://bbs.06climate.com/forum.php?mod=viewthread&tid=38391&page=1#pid530730
- win8以上系统,设置英文为默认输入法
说明:这里将添加“简体中文(美式键盘)”,也就是英文输入法,并设置为默认输入法. 1.打开控制面板—时钟.语言和区域—语言,点击“添加语言”,选择“英语”—打开,选择“英语(美国)” —添加. 2.选 ...
- PHP array_count_values() 函数用于统计数组中所有值出现的次数。
定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 语法 array_count ...
- HDU 2222:Keywords Search(AC自动机模板)
http://acm.hdu.edu.cn/showproblem.php?pid=2222 KMP是单模式串匹配的算法,而AC自动机是用于多模式串匹配的算法.主要由Trie和KMP的思想构成. 题意 ...
- [ios][swift]swift 怎么去除 optional
在转换String时要使用“!”进行拆包,用“?”则会有optional 出现
- easyrtc-server在ubuntu14.04上的安装方法
easyrtc 官网 http://easyrtc.com/ 1.安装nodejs,安装npm (不知道如何安装请google一下) 2. 查看运行easyrtc 所需要的js 包,在easyrtc ...
- 20150624_Andriod _web_service_匹配
using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...
- UVa 11624,两次BFS
题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...