绑定源与x:Static的区别

4

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

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

或者:

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

这两种方法有什么区别吗?
1个回答

5

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

来自x:Static标记扩展

当您进行的x:Static引用不是属性值类型时,请注意小心。在XAML处理序列中,从标记扩展提供的值不会调用附加值转换。即使您的x:Static引用创建了一个文本字符串,并且基于文本字符串的属性值通常针对该特定成员或返回类型的任何成员值进行值转换。

因此,假设您执行以下操作:

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

这将导致运行时错误:

'#FFB4B4B4' 不是属性 'Text' 的有效值。

因为 SolidColorBrush 不是 String,而是另一种类型。

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

这将能够正常工作并显示#FFB4B4B4,因为它会执行ToString()转换。另外,如果没有Binding,您将无法访问静态对象的实例属性,因此例如您将无法获取该刷子的Color属性。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接