WPF:实现自定义标记扩展_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF:实现自定义标记扩展

WPF:实现自定义标记扩展

 2015/3/28 23:07:07  zhoumy  程序员俱乐部  我要评论(0)
  • 摘要:标记扩展使用{标记扩展类参数}语法,如:<TextBlockText={x:Null}/>为什么x:Null就可以返回一个null值呢?其实在System.Windows.Markup命名空间中存在一个名为“NullExtension”的类型。在解析到x:Null的时候,实际上会实例化NullExtension的一个对象。而NullExtension实现了抽象类MarkupExtension,MarkupExtension中提供了抽象方法
  • 标签:实现 自定义

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

<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中一个语法糖而已。

运行效果:

发表评论
用户名: 匿名