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名称空间中的标记拓展的更多相关文章

  1. x名称空间中的内容

    原文:x名称空间中的内容 x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与XAML的解析有关,下面分三部分介绍 一:x名称空间 ...

  2. 9、XAML名称空间详解

    XAML命名空间 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      ...

  3. Spring的2.5版本中提供了一种:p名称空间的注入(了解)

    1. 步骤一:需要先引入 p 名称空间 * 在schema的名称空间中加入该行:xmlns:p="http://www.springframework.org/schema/p"( ...

  4. [No000013F]WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  5. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间

    第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免 ...

  6. WPF学习之X名称空间详解

    X名称空间里面的成员(如X:Name,X:Class)都是写给XAML编译器看的.用来引导XAML代码将XAML代码编译为CLR代码. 4.1X名称空间里面到底都有些什么? x名称空间映射的是:htt ...

  7. x名称空间

    XAML代码的WPF程序都需要通过语句:xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",x就是用来映射xmlns:x= ...

  8. C++ 名称空间

    在程序中,只使用 using namespace std; 而不使用其他的名称空间,如using namespace boost; 这样的好处有: 1.可以避免不同名称空间中的名称冲突: 2.可以很清 ...

  9. 理解C#系列 / 核心C# / 名称空间

    名称空间namespace 名称空间 名称空间用来逻辑分类,而不是物理上的,名称空间与程序集无关[程序集:经由编译器编译得到的文件],同一个程序集中可以有2不同的名称空间,也可以在不同的程序集中定义同 ...

随机推荐

  1. V4L2学习笔记【转】

    本文转载自:http://www.cnblogs.com/silence-hust/p/4464291.html v4l2,一开始听到这个名词的时候,以为又是一个很难很难的模块,涉及到视频的处理,后来 ...

  2. linux的mtd架构分析【转】

    转自:http://blog.csdn.net/column/details/xgbing-linux-mtd.html linux mtd 嵌入式系统的存储有很多不可靠之处.随着使用容量的增大,现在 ...

  3. Pro ASP.NET MVC 5 Framework.学习笔记.6.4.MVC的必备工具

    2.5.创建链式依赖 当你请求Ninject创建一个类型,它检查该类型的依赖是否声明.它也会检查该依赖是否依赖其他类型.如果这里有附加依赖,Ninject自动解决他们,并创建请求的所有类的实例.正是由 ...

  4. shell中读写mysql数据库

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  5. Maven之Nexus构建企业级Maven仓库

    什么是Nexus? Nexus是Maven仓库管理器,用来搭建一个本地仓库服务器,这样做的好处是便于管理,节省网络资源,速度快,还有一个非常有用的功能就是可以通过项目的SNAPSHOT版本管理,来进行 ...

  6. JavaScript,base64加密解密

    直接下载吧: http://files.cnblogs.com/files/xiluhua/base64Decode.js

  7. thinkphp3.2 分页方式汇总

    //自定义分页 $page = $_GET['page'] ? $_GET['page'] : 1 ; $count = $this->Table("user")->c ...

  8. 七牛开发文档php

    http://developer.qiniu.com/docs/v6/sdk/php-sdk.html#overview http://developer.qiniu.com/docs/v6/sdk/ ...

  9. java 错误集锦

    Exception in thread "main" java.lang.Error: Unresolved compilation problem: at com.niuniu. ...

  10. css常用命名规则

    (一)常用的CSS命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrappe ...