2009-04-17 9 views
1

Je dois afficher une grande liste de propriétés/valeurs. Mon problème est qu'il n'y a pas de valeurs pour toutes ces propriétés, donc je ne voudrais pas les afficher dans ce cas.Avec WPF, comment faire pour réduire un TextBlock en fonction du contenu de son TextBlock enfant?

Il sera plus facile de comprendre mon problème avec un code:

<StackPanel DataContext=...> 
<TextBlock>Info1:<TextBlock Text={Binding Path=Info1} /></TextBlock> 
<TextBlock>Info2:<TextBlock Text={Binding Path=Info2} /></TextBlock> 
<TextBlock>Info3:<TextBlock Text={Binding Path=Info3} /></TextBlock> 
</StackPanel> 

Fondamentalement, en fonction du contenu de l'enfant TextBlock, je voudrais réduire la TextBlock mère. Mon idée était d'utiliser un style qui s'applique à tous les TextBlock et de vérifier le contenu, et s'il n'y en a pas, de réduire le parent ... malheureusement, je n'arrive pas à accéder au parent à partir du DataTrigger. Probablement vous aurez une solution plus soignée que cela :)

Merci beaucoup pour votre aide!

Répondre

2

Vous pouvez lier la visibilité du textblock extérieur au texte de la textblock intérieure à l'aide d'un simple convertisseur:

<TextBlock Name="outer1" 
      Visibility="{Binding ElementName=inner1, Path=Text, Converter={StaticResource MyConverter}}"> 
    Info1:<TextBlock Name="inner1" Text="{Binding Path=Info1}" /> 
</TextBlock> 

ou lier la visibilité du textblock externe directement à Info1:

<TextBlock Visibility="{Binding Path=Info1, Converter={StaticResource MyConverter}}"> 
    Info1:<TextBlock Text="{Binding Path=Info1}" /> 
</TextBlock> 
1

Si vous vous trouvez dans un modèle ou un style, vous pouvez utiliser des déclencheurs pour définir la visibilité du bloc de texte externe.

Par exemple, en cas de DataTemplate:

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding Path=Info1}" Value=""> 
     <Setter Property="Visibility" TargetName="pnlInfo1" Value="Hidden" /> 
    </DataTrigger> 
    <!-- and so on ... --> 
</DataTemplate.Triggers> 

Réglez le déclencheur en fonction de vos besoins. Par exemple vous pouvez le cacher quand il est null ou utiliser un convertisseur comme gcores suggéré de faire plus de vérification de fantaisie.

Questions connexes