Sur ma fenêtre, il y a plusieurs contrôles GroupBox, chacun contenant un contrôle de grille. À ces grilles je veux asigner un style. Mais uniquement pour les Grids directement dans un GroupBox, toutes les autres Grilles ne devraient pas être affectées.Style DataTrigger avec référence au type de contrôle parent
J'ai essayé ce qui suit, qui ne fonctionne pas car GetType() n'a pas de propriété.
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.GetType()}" Value="{x:Type GroupBox}">
<!-- <Setter Property="..." Value="..."/> -->
</DataTrigger>
</Style.Triggers>
</Style>
J'ai trouvé une solution de contournement, mais ce n'est pas vraiment une belle solution, que je dois modifier les zones de groupe:
<Style TargetType="GroupBox">
<Setter Property="Tag" Value="blub"/>
</Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Parent.Tag, RelativeSource={RelativeSource Mode=Self}}" Value="blub">
<!-- <Setter Property="..." Value="..."/> -->
</DataTrigger>
</Style.Triggers>
</Style>
Il est évident que je pourrais définir le style pour chaque grille manuellement, mais je J'essaie d'éviter cela, car il y en a beaucoup. J'espère que vous pouvez trouver un moyen de faire fonctionner le premier exemple.
Je crains que vous vous trompiez à ce sujet. Mon code fonctionne très bien. Le mode n'est pas de type BindingMode, mais de type RelativeSourceMode. Ma conjecture serait que vous avez négligé les accolades dans RelativeSource = {RelativeSource Mode = Self} qui fait de Mode une propriété de RelativeSource et non de Binding. – PeterE
@Peter: Vous avez raison. Ce défilement horizontal m'a dérangé et je n'ai pas vraiment remarqué les accolades internes qui font de la propriété 'Mode' de RelativeSource. Merci d'avoir signalé l'erreur! :-) – Nawaz