2014-06-14 4 views
2

dans WPF on peut lier aux propriétés statiques. Maintenant, je sais que 2 façons de le faire:Liaison source vs x: statique

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

Ou:

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

Y at-il des différences entre ces 2 méthodes?

Répondre

3

Principale différence dans ce cas est que x:Static ne fonctionne pas convertion plus

De x:Static Markup Extension

Use caution when you make x:Static references that are not directly the type of a property's value. In the XAML processing sequence, provided values from a markup extension do not invoke additional value conversion. This is true even if your x:Static reference creates a text string, and a value conversion for attribute values based on text string typically occurs either for that specific member or for any member values of the return type.

Disons donc que vous

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

cela va provoquer une erreur d'exécution:

'#FFB4B4B4' is not a valid value for property 'Text'.

parce SolidColorBrush n'est pas String tout

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

fonctionnera bien et l'affichage # FFB4B4B4 parce qu'il interprétera ToString() convertion. En outre, sans Binding vous n'êtes pas en mesure d'accéder aux propriétés d'instance d'objet statique par exemple, vous ne seriez pas en mesure d'obtenir Color propriété de cette brosse

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