Property Elements
使用单独的XML节点来表示WPF对象的属性值,这样就可以表示比较复杂的对象。
比如
<Button Background="Yellow" />
使用Property Elements就可以这样表示
<Button>
<Button.Background>Yellow</Button.Background>
</Button>
对简单对象似乎更复杂了,但是如果要表示更复杂一点的对象,比如
<Button>
<Button.Background>
<SolidColorBrush>
<SolidColorBrush.Color>
<Color A=”255” R=”255” G=”255” B=”255”/>
</SolidColorBrush.Color>
</Button.Background>
</Button>
这时候,如果没有Property Elements就很难表示了。
Type Converters
为什么前面的Background既可以用"Yellow"这样简单的字符串赋值,也可以用SolidColorBrush这样的复杂对象赋值呢?是不是WPF引擎做了很多的特殊处理?
其实是WPF内部提供了很多的类型转换类(Type Converter),可以把字符串转换成特定的数据类型,比如前面Background就是Brush类型。这样,就可以把常用对象用字符常量进行定义,方便使用.这种做法具有可扩展性,不需要硬编码。
Markup Extensions
就像PHP和ASP等语言一样,为了实现HTML和代码的混合编写,需要在使用特殊的代码标记,比如“<%%>”。同样,在XAML里,使用的是“{}”。在花括号里的,就是.NET类对象,只是用法比较单一,就是简单的函数调用的样子,而没有流程控制,看起来不那么像常见的代码。比如
Content="{Binding Path=Height, RelativeSource={RelativeSource Self}}"
在XAML里,Markup Extensions主要用于对象的引用和数据绑定。
可以设想一下,如果没有Markup Extensions,纯粹使用XML来表示以上功能也是可以的。比如
<Button.Content>
<Binding Path="Height">
<Binding.RelativeSource>
<RelativeSource>
Self
...
可以看到,使用XML来表示的话,非常冗余。所以,我想Markup Extensions的使用,就是为了简洁。如果把XML换成JSON的话,也许就可以不用Markup Extensions了。
使用单独的XML节点来表示WPF对象的属性值,这样就可以表示比较复杂的对象。
比如
<Button Background="Yellow" />
使用Property Elements就可以这样表示
<Button>
<Button.Background>Yellow</Button.Background>
</Button>
对简单对象似乎更复杂了,但是如果要表示更复杂一点的对象,比如
<Button>
<Button.Background>
<SolidColorBrush>
<SolidColorBrush.Color>
<Color A=”255” R=”255” G=”255” B=”255”/>
</SolidColorBrush.Color>
</Button.Background>
</Button>
这时候,如果没有Property Elements就很难表示了。
Type Converters
为什么前面的Background既可以用"Yellow"这样简单的字符串赋值,也可以用SolidColorBrush这样的复杂对象赋值呢?是不是WPF引擎做了很多的特殊处理?
其实是WPF内部提供了很多的类型转换类(Type Converter),可以把字符串转换成特定的数据类型,比如前面Background就是Brush类型。这样,就可以把常用对象用字符常量进行定义,方便使用.这种做法具有可扩展性,不需要硬编码。
Markup Extensions
就像PHP和ASP等语言一样,为了实现HTML和代码的混合编写,需要在使用特殊的代码标记,比如“<%%>”。同样,在XAML里,使用的是“{}”。在花括号里的,就是.NET类对象,只是用法比较单一,就是简单的函数调用的样子,而没有流程控制,看起来不那么像常见的代码。比如
Content="{Binding Path=Height, RelativeSource={RelativeSource Self}}"
在XAML里,Markup Extensions主要用于对象的引用和数据绑定。
可以设想一下,如果没有Markup Extensions,纯粹使用XML来表示以上功能也是可以的。比如
<Button.Content>
<Binding Path="Height">
<Binding.RelativeSource>
<RelativeSource>
Self
...
可以看到,使用XML来表示的话,非常冗余。所以,我想Markup Extensions的使用,就是为了简洁。如果把XML换成JSON的话,也许就可以不用Markup Extensions了。