WPF:实现自定义标记扩展
2015-03-28 21:17
302 查看
标记扩展使用{标记扩展类 参数}语法,如:
为什么x:Null就可以返回一个null值呢?
其实在System.Windows.Markup命名空间中存在一个名为“NullExtension”的类型。
在解析到x:Null的时候,实际上会实例化NullExtension的一个对象。
而NullExtension实现了抽象类MarkupExtension,MarkupExtension中提供了抽象方法:
也就是说,NullExtension在实现抽象类的ProvideValue方法时,返回了一个Null而已,所以x:Null在运行时可以代表一个null值。
下面,假设有这样一个需求:实现一个标记扩展类StringExtension,这个扩展类接受一个int参数,然后返回一个string对象。
可以如下实现:
使用方法如下:(假设StringExtension存在于项目根目录下)
也可以写为:
这只是xaml中一个语法糖而已。
运行效果:
<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整理-自定义一个扩展标记(custom markup extension)
- 扩展DataGrid控件,能够实现多列排序,自定义标题,动态增加表头等
- 关于spring 2.0自定义xml 标记 (二 如何实现)
- 谷歌地图控件,通过扩展实现GMAP的自定义绘图系统
- lightswitch自定义扩展实现示例教程
- lightswitch自定义扩展实现示例教程
- J2EE 探索者:用五个容易的步骤实现 JSP 自定义标记
- 如何:实现和调用自定义扩展方法
- Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记
- Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记
- WPF Control Hints - Button : 除了自定义Templet,怎么方便实现无边框的Button
- 关于spring 2.0自定义xml 标记 (二 如何实现)
- C# 实现和调用自定义扩展方法
- 扩展Log4Net中的ILog实现自定义日志字段
- C# 实现和调用自定义扩展方法
- 关于spring 2.0自定义xml 标记 (二 如何实现)
- WPF,Silverlight与XAML读书笔记第三 - 标记扩展
- 在WPF中实现数据验证实现自定义的Popup提示
- 通过自定义ServiceHost实现对WCF的扩展[原理篇]
- 如何利用C自定义实现PHP扩展