绑定源vs x:静态

时间:2014-06-14 14:37:07

标签: wpf binding properties static

WPF中的

可以绑定到静态属性。现在我知道了两种方法:

Content="{x:Static stat:Statics.CurrentUser}"

或者:

Content="{Binding Source={x:Static stat:Statics.CurrentUser}}"

这两种方法之间有什么区别吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下的主要区别是x:Static不执行额外的转换

来自x:Static Markup Extension

  

制作x:静态引用时要小心,这些引用不是属性值的类型。在XAML处理序列中,来自标记扩展的提供的值不会调用其他值转换。即使x:静态引用创建文本字符串也是如此,并且基于文本字符串的属性值的值转换通常发生在该特定成员或返回类型的任何成员值上。

所以我们说你做了

<TextBlock Text="{x:Static SystemColors.ActiveBorderBrush}"/>

这会导致运行时错误:

  

&#39;#FFB4B4B4&#39;不是属性的有效值&#39;文字&#39;。

因为SolidColorBrush不是String

<TextBlock Text="{Binding Source={x:Static SystemColors.ActiveBorderBrush}}"/>

将正常工作并显示#FFB4B4B4 ,因为它将执行ToString()转换。如果没有Binding,您将无法访问静态对象的实例属性,例如,您将无法获得该画笔的Color属性

<TextBlock Text="{Binding Source={x:Static SystemColors.ActiveBorderBrush}, Path=Color}"/>