码迷,mamicode.com
首页 > Windows程序 > 详细

WPF:实现自定义标记扩展

时间:2015-03-28 21:34:54      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

标记扩展使用{标记扩展类 参数}语法,如:

<TextBlock Text={x:Null}/>

为什么x:Null就可以返回一个null值呢?

其实在System.Windows.Markup命名空间中存在一个名为“NullExtension”的类型。

在解析到x:Null的时候,实际上会实例化NullExtension的一个对象。

而NullExtension实现了抽象类MarkupExtension,MarkupExtension中提供了抽象方法:

public abstract object ProvideValue(IServiceProvider serviceProvider);


也就是说,NullExtension在实现抽象类的ProvideValue方法时,返回了一个Null而已,所以x:Null在运行时可以代表一个null值。

 

下面,假设有这样一个需求:实现一个标记扩展类StringExtension,这个扩展类接受一个int参数,然后返回一个string对象。

可以如下实现:

    public class StringExtension:MarkupExtension
    {
        private int n;
        public StringExtension(int n)
        {
            this.n = n;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return n.ToString();
        }
    }

使用方法如下:(假设StringExtension存在于项目根目录下)

<TextBlock Text="{local:String 1}" />

也可以写为:

<TextBlock Text="{local:StringExtension 1}" />

这只是xaml中一个语法糖而已。

运行效果:

技术分享

WPF:实现自定义标记扩展

标签:

原文地址:http://www.cnblogs.com/DoNetCoder/p/4374836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!