zoukankan      html  css  js  c++  java
  • WPF:实现自定义标记扩展

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

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

    运行效果:

  • 相关阅读:
    hdu5616 暴力枚举
    codeforce 35C fire again
    常用代码及经验总结(不断更新)
    codeforce AIM tech Round 4 div 2 B rectangles
    codeforce diversity
    codeforce 589B枚举
    codeforces 1A
    自学Java测试代码
    自学Jav测试代码三 Math类 & Date & GregorianCalendar类
    数学类与图形类
  • 原文地址:https://www.cnblogs.com/DoNetCoder/p/4374836.html
Copyright © 2011-2022 走看看