-
- 标记扩展,与类型转换器相似,是扩展 XAML 的表达能力的方法。与其不同的是标记扩展提供的是一种显示的、一致的语法调用,因此标记扩展是最好的扩展 XAML 的方法。
- WPF 好几个内建的标记扩展,派生于 MarkupExtension 类。
- 标记扩展在运行时计算字符串特性的值,并生成一个合适的基于字符串的对象。
- 标记扩展的语法格式
- 扩展标记类的名称按照惯例,都是以 Extension 后缀结尾,在 XAML 中使用它时,可以不用该后缀。
- 定位参数是被作为字符串参数传入扩展类的相应构造函数中的。
- 命名参数可以用来在已构造好的扩展对象上设置相应名字的属性。这些属性值可以是标记扩展值自己(使用嵌套的花括号表示),也可以是文本值。
- 摆脱花括号:如果需要设置一个属性特性值为字面值字符串(以左花括号开始),可以通过在其之前增加一对空花括号来实现。也可以使用属性元素语法来实现。
2.6 标记扩展
只要特性值由花括号({})括起来,XAML 编译器就会把它认作一个标记扩展值,而不是一个普通的字符串。花括号中的第一个识别符是标记扩展类的名称。如果标记扩展支持,可以使用逗号分隔的参数来指定它的值。
例如:
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="{x:Null}"
Height="{x:Static SystemParameters.IconHeight}"
Content="{Binding Path=Height, RelativeSource={RelativeSource Self}}" />
其中:x:Null、x:Static、Binding、RelativeSource 是标记扩展类名称
Path、RelativeSource 是命名参数
SystemParameters.IconHeight、Height、Self 是定位参数
例如:
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Content="{}{This is not a markup extension!}" />
或者
<Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
{This is not a markup extension!}
</Button>