WPF标记扩展

本文介绍了WPF中的几种标记扩展,包括x:Type、x:Null、x:Static和x:Array的使用方法及示例。x:Type用于操作数据类型,x:Null赋予属性空值,x:Static访问静态成员,x:Array创建类型已知的ArrayList实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标记扩展实际上就是一些MarkupExtension类的直接或间接派生类。

x名称空间中就包含有一些这样的类所以我们就称他们为x名称空间内的标记扩展

x名称中的标记扩展又有哪些呢?

x:Type

用来操作数据类型的实例或者实例的引用也可以操作自己本身

示例

首先我们在后台创建一个WPF项目,接着添加一个WPF窗口名称为MyWindow,向后台编写一个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方法判断这个类是否是窗体如果是就显示这个窗体

然后向页面进行布局:

  <StackPanel Background="LightBlue">

        <TextBox Margin="5"/>

        <TextBox Margin="5"/>

        <TextBox Margin="5"/>

        <Button Content="OK" Margin="5"/>

</StackPanel>

我们看下样式,下图:

接着来到新建默认的那个项目向其本身添加引用自身的命名空间名称为local,名称为自己随意取

xmlns:local="clr-namespace: WpfApp1"

注意引用名称空间后最好去生成一下项目

然后进行UI布局,向其添加一个StackPanel布局控件,在其中添加自定义按钮,内容为Show

<StackPanel>

        <local:MyButton Content="Show" UserWindowType="{x:Type local:MyWindow}" Margin="5"/>

 </StackPanel>

样式图片:

运行结果就是点击Show会弹出MyWindow这个窗口

x:Null

对属性赋一个空值(默认值)

例如在页面布局中我们定义了Button的Style样式但是我有的Button却不想继承这个样式这样我们就可以用到x:Null属性了

XAML布局

<Window.Resources>

        <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">

            <Setter Property="Width" Value="60"/>

            <Setter Property="Height" Value="30"/>

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

        </Style>

    </Window.Resources>

    <StackPanel Background="AliceBlue">

        <Button Content="One"/>

        <Button Content="Two"/>

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

 </StackPanel>

运行结果,如下图:

可以看出第三个样式不做改变就是系统默认的Button样式

x:Static

它一个很常用的标记扩展在XAML中使用数据类型的Static成员x:Static访问的static成员一定是数据类型的属性或者字段

首先我们为主窗体后台添加两个static成员一个是static字段一个是static属性

 

public static string WindowTitle = "猩猩之伙"; //窗体标题

public static string ShowText { get { return "可以撩猿"; } }  //窗体内容;

 

然后在XAML中使用x:Static来访问这两个成员

改变窗口标题

Title="{x:Static local:MainWindow.WindowTitle}"

改变窗口内容

<StackPanel>

        <TextBlock FontSize="32" Foreground="Aquamarine" Text="{x:Static local:MainWindow.ShowText}"/>

 </StackPanel>

运行结果,如下图:

x:Array

通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员类型由x:ArrayType指明

示例:添加以下命名空间的引用,把一个x:Array当作数据源向一个ListBox提供数据

 xmlns:sys="clr-namespace:System;assembly=mscorlib"

接着页面布局如下

<Grid Background="LightBlue">

     <ListBox Margin="5" ItemsSource="{x:Array Type=sys:String}"/>

        <ListBox Margin="5">

            <ListBox.ItemsSource>

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

                    <sys:String>One</sys:String>

                    <sys:String>Two</sys:String>

                    <sys:String>Three</sys:String>

                </x:Array>

            </ListBox.ItemsSource>

       </ListBox>

  </Grid>

页面运行结果,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值