Accueil

Changer la Visibility avec un Trigger

by Jean-Camille Mercier 17. mai 2013 16:32

L'une des grandes fonctionnalités de WPF est le Trigger : il est possible de changer les propriétés des objets d'interface en fonction de l'état de nos objets métiers sur lesquels on est bindé, par exemple mettre le nom d'une personne en bleu si c'est un homme :

<DataTrigger Binding="{Binding Sexe}" Value="Homme" >
  <Setter Property="Foreground" Value="Blue" />
</DataTrigger>

J'ai eu une petite difficulté aujourd'hui pour changer la visibilité d'un TextBlock avec un DataTrigger car j'avais placé la visibilité par défaut dans le TextBlock alors qu'il faut le mettre dans le style ! Voici le code complet final :

<TextBlock Text="{Binding TypeArretTravail, Converter={StaticResource EnumConverter}}">
            <!--Visibility="Hidden" />-->
  <TextBlock.Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource BaseTextBoxStyle}">
      <Setter Property="Visibility" Value="Hidden"/>
      <Style.Triggers>
        <DataTrigger Binding="{Binding TypeArretTravail}" 
                           Value="{x:Static opyE:TypeArretTravailEnum.Initial}" >
          <Setter Property="Visibility" Value="Visible" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </TextBlock.Style>
</TextBlock

Ce qu'il faut noter :

  • Ne pas mettre Visibility inline sur le TextBlock mais utiliser un setter dans le style
  • Définir le TargetType du style 
  • Ne pas oublié le BasedOn si l'on a un style par défaut à appliquer
  • L'utilisation d'une enum en xaml avec x:Static