2009-05-21 11 views
0

Je suis très nouveau dans WPF. J'ai un ListBox où je veux placer un modèle pour un article (je l'ai appelé Person). Un TextBlock doit être utilisé. La personne a des propriétés publiques: "Foreground" et "IsOnline". Si "IsOnline" est vrai, j'utiliserais la propriété "Foreground" de la personne, sinon "Gray". C'est tout. Mon premier modèle est:WPF: Personnalisation d'un datatemplate à l'aide d'une propriété de liaison

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}"> 
    <TextBlock Text="{Binding Path=Name}" Foreground="{Binding Path=Foreground}" Margin="1"> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=IsOnline}" Value="False"> 
       <Setter Property="TextBlock.Foreground" Value="Gray" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
</DataTemplate> 

Bien sûr, cela ne fonctionne pas. Il n'y a pas d'exception, mais aussi pas le résultat attendu. Puis j'ai essayé d'utiliser le Trigger pour le TextBlock, mais il y aura une exception, que je ne peux pas utiliser DataTriggers (seulement EventTriggers) pour cela.

Merci pour votre conseil! :)

Répondre

3

Donnez à votre TextBlock un nom et définissez la propriété TargetName du setter à ce nom.

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}"> 
    <TextBlock x:Name="tb" Text="{Binding Path=Name}" 
      Foreground="{Binding Path=Foreground}" Margin="1" /> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=IsOnline}" Value="False"> 
      <Setter TargetName="tb" Property="Foreground" Value="Gray" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

Merci beaucoup. Cela a fonctionné pour moi. –

Questions connexes