WPF中自定义MarkupExtension

2021-04-20 02:28

阅读:337

  在介绍这一篇文章之前,我们首先来回顾一下WPF中的一些基础的概念,首先当然是XAML了,XAML全称是Extensible Application Markup Language (可扩展应用程序标记语言),是专门用于WPF技术中的UI设计语言,通过使用XAML语言,我们能够快速设计软件界面,同时能够通过绑定这种机制能够很好地实现界面和实现逻辑之间的解耦,这个就是MVVM模式的核心了,那么今天我们介绍的MarkupExtension和XAML之间又有哪些的关系呢?  

  Markup Extension,顾名思义,就是对xaml的扩展,在XAML中,规定如果属性以{}开始及结束,就是Markup Extension,Markup Extension指的是继承于MarkupExtension的类,首先我们通过一张图来看看WPF中有哪些已知的Markup Extension。

技术分享图片

  看了这张图片之后是不是对这个MarkupExtension有一个常规的认识,你会发现这个在WPF中实在是太重要了,通过这个MarkupExtension我们能够实现绑定、资源等等一系列的操作,在介绍完这个之后,我们来看看,这个抽象的MarkupExtension基类到底是什么?里面包含些什么?怎么去使用它?

#region 程序集 WindowsBase.dll, v3.0.0.0
// C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll
#endregion

using System;

namespace System.Windows.Markup
{
    // 摘要:
    //     为所有 XAML 标记扩展提供基类。
    public abstract class MarkupExtension
    {
        // 摘要:
        //     初始化从 System.Windows.Markup.MarkupExtension 派生的类的新实例。
        protected MarkupExtension();

        // 摘要:
        //     在派生类中实现时,返回一个对象,此对象被设置为此标记扩展的目标属性的值。
        //
        // 参数:
        //   serviceProvider:
        //     可以为标记扩展提供服务的对象。
        //
        // 返回结果:
        //     将在扩展应用到的属性上设置的对象值。
        public abstract object ProvideValue(IServiceProvider serviceProvider);
    }
}

   其实看看里面的内容,仅仅提供了一个抽象的方法ProvideValue,我们在继承这个抽象类后需要去重载这个抽象方法,然后来实现自己的逻辑。

  在对整个MarkupExtension介绍之后,我们可以对它进行一个总结,那就是:

  XAML标记扩展语法格式: 

  
      这个是不是很熟悉,如果还是不够直观的话,我们可以通过代码来进行说明:      

  


评论


亲,登录后才可以留言!