Dans WPF, est-il un moyen de lier, de frère, de propriétés?
J'ai une série de TextBlock
et TextBox
contrôles. Est-il un moyen pour appliquer un Style
à la TextBlock
s tels qu'ils peuvent databind pour le contrôle immédiatement après eux?
J'aimerais être capable de faire quelque chose comme ceci:
<Resources..>
<Style x:Key="BindToFollowingTextBoxSibling">
<Setter Property="TextBlock.Text" Value="{Binding RelativeSource={RelativeSource FollowingSibling}, Path=Text, Converter={StaticResource MyConverter}}" />
<Setter Property="TextBlock.Background" Value="{Binding RelativeSource={RelativeSource FollowingSibling}, Path=Text, Converter={StaticResource TextToBrushConverter}}" />
... More properties and converters.
</Style>
</Resources>
...
<TextBlock Style="{StaticResource BindToFollowingTextBoxSibling}"/>
<TextBox/>
<TextBlock Style="{StaticResource BindToFollowingTextBoxSibling}"/>
<TextBox/>
<TextBlock Style="{StaticResource BindToPreviousTextBoxSibling}"/>
Est quelque chose comme ce même possible?
Vous devez vous connecter pour publier un commentaire.
Je pense que la meilleure chose à faire dans ce cas est de se lier par ElementName:
Permettra d'obtenir quelque chose de similaire. Cela fonctionne pour vous?
Je sais que c'est un vieux thread, mais j'ai trouvé une solution à ce problème. J'ai pu utiliser
Aland Li suggestion, trouvé ici. Son pas tout à fait aussi générique que c'est dans le CSS, mais si vous savez le parent de l'élément de type, cela fonctionne très bien même dans un Style.
Voici un exemple de la façon dont je l'ai utilisé. J'ai un contrôle de zone de texte qui s'allume avec une "couleur de surbrillance" quand il a le focus. En outre, je voulais son Étiquette associée contrôle allume également lorsque la zone de texte a le focus. J'ai donc écrit un Déclencheur pour le contrôle Label qui fait de la lumière dans la même manière que le contrôle de zone de texte n'. Ce Trigger est déclenché par une propriété attachée personnalisée appelé IsFocusedByProxy. Ensuite, j'ai besoin de lier l'Étiquette du IsFocusedByProxy à la zone de texte du IsFocused. J'ai donc utilisé cette technique:
À ce stade, vous pensez peut-être que ce n'est pas mieux que de simplement en utilisant ElementName dans la Liaison. Mais la différence est que maintenant je peux me déplacer cette liaison dans un Style pour la réutilisabilité:
Et maintenant, je peux quand j'ai Vue plein de ces événements, comme ceci (j'ai d'installation de la nécessaire Styles à appliquer de manière implicite, de sorte que c'est pourquoi il n'y a pas de balisage illustré qui définit les Styles):
Qui me donne ces résultats:
Avant tout des zones de texte a le focus:
Avec différentes zones de texte reçoit le focus:
{Binding Path=Children[1].IsFocused, RelativeSource={RelativeSource AncestorType=Grid}}
.1
dansPath=Children[1]
est un index (index de base zéro de cours). Ainsi, vous pouvez ajuster ce nombre si votre structure est différente. Des acclamations.