浅谈WPF中x名称空间(二)

来源:互联网 发布:mac pro 无线鼠标 编辑:程序博客网 时间:2024/06/05 05:29

   二、x名称空间中的标记扩展

   标记扩展(Markup Extension)实际上就是一些MarkupExtension类直接或者间接的派生类,在x名称空间中就存在这样一些类,所以常称它们为x名称空间内的标记扩展。

下面我们来看一下常用的标记扩展吧!

1、x:Type 从字面上开,x:Type的值应该是一个数据类型的名称。一般情况下,我们在编程中操作的是数据类型的实例或者是实例的引用,但是有时候我们也会用到数据类型本身。下面我们还是来看一个例子吧!

     首先创建一个Button的派生类:

     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();

          }

在该类中存在一个Type类型的属性,即UserWindowType,此时你需要将一种数据类型当做值赋给它。同时在该类中重写了父类的OnClick方法,此时可以像父类那样激活Click时间,还会创建UserWindowType所存储类型的一个实例。

<Window x:Class="WpfApplication.Window1"

                  xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation

                  xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml

                  Title="Window1" Width="200" Height="170">

                  <StackPanel Background="LightBlue">

                                  <TextBox />

                                  <TextBox />

                                  <Button Content="确认" />

                  </StackPanel>

 </Window>

此时,我们将自定义按钮添加到窗口中,并且把Window1作为数据类型复制给自定义按钮的UserWindowType属性。

<Window x:Class="WpfApplication.Window2"

                  xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation

                  xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml

                  Title="Window2" Width="300" Height="300">

                  <StackPanel>

                            <local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:Window1}" />

                  </StackPanel>

 </Window>

这就是x:Type的用法了!

2、x:Null 该标记扩展的作用是将一个空值显示的赋给一个属性。我们知道在C#中用null表示空值,那么在xaml中就用x:Null表示空值了。同样让我们来看一个例子:

<Window.Resource>

<Style TargetType="Button">

        <Setter Property="Background" Value="LightBlue" />

</Style>

</Window.Resource>

<StackPanel>

<Button Content="Button1" />

<Button Content="Button2" />

<Button Content="Button3"/>

<Button Content="Button4" Style="{x:Null}" />

</StackPanel>

以上代码的运行效果是,前三个Button的背景色均为浅蓝色,而最后一个button为默认颜色。知道x:Null的用法了吧!

3、x:Array 该Attribute的作用就是通过它的Items属性向使用者报了一个类型已知的ArrayList实例,ArrayList内成员的类型有x:Array的Type指明。下面我们一个例子来说明吧!

<ListBox>

<ListBox.ItemsSource>

<x:Array Type="sys:String">

<sys:String>1</sys:String>

<sys:String>2</sys:String>

<sys:String>3</sys:String>

</x:Array>

</ListBox.ItemsSource>

</ListBox>

运行程序,你就知道效果了!

4、x:Static 是一个很常用的标记扩展,它的主要作用是使用数据类型中的Static成员。主要用于程序的国际化支持了。同样用例子说话:

public class Chinese

{

      public static string btnSure = "确认";

}

public class English

{

     public static string btnSure = "OK";

}

根据选择不同的语言,使其展现内容的语言不同

<Button Content="{x:Static ocal:Chinese.btnSure}"

三、XAML指令元素

x:Code 主要用于在xaml中写入C#代码

原创粉丝点击