2009-12-03 6 views
0

J'ai le panneau de pile suivantWPF textblock autosize/mise en page StackPanel

<StackPanel> 
       <TextBlock Text="{Binding AddressLine1}" /> 
       <TextBlock Text="{Binding AddressLine2}" /> 
       <TextBlock Text="{Binding AddressLine3}" /> 
       <TextBlock Text="{Binding AddressLine4}" /> 
</StackPanel> 

et ma chaîne AddressLine2 est nulle sur l'objet lié.

Mon panneau de pile rend comme

| AddressLine1 | 
|    | 
| AddressLine3 | 
| AddressLine4 | 

mais je veux qu'il rendre comme

| AddressLine1 | 
| AddressLine3 | 
| AddressLine4 | 

est-ce possible, ou suis-je manque une façon évidente de le faire?

Merci, Chris

Répondre

2

Créer un convertisseur qui implémente IMultiValueConverter puis utilisez un MultiBinding sur le texte de sorte que vous avez seulement un TextBlock avec chaque ligne comme celui-ci:

class MultiStringConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var text = new StringBuilder(); 
     for (int i = 0 ; i < values.Length ; i++) { 
      string line = String.Format("{0}", values[i]); 
      if (!String.IsNullOrEmpty(line)) { 
       text.AppendLine(line); 
      } // if 
     } 
     return text.ToString(); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Et dans le XAML ...

<TextBlock> 
     <TextBlock.Text> 
      <MultiBinding> 
       <MultiBinding.Converter> 
        <Local:MultiStringConverter /> 
       </MultiBinding.Converter> 
       <Binding Path="AddressLine1" /> 
       <Binding Path="AddressLine2" /> 
       <Binding Path="AddressLine3" /> 
       <Binding Path="AddressLine4" /> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
0

Vous pouvez lier la visibilité du TextBlock à la propriété Text en utilisant un ValueConverter

+0

Je pensais que cela pourrait être le cas - il semble tellement en désordre - j'espérais vraiment un peu de XAML le ferais – Chris

+0

Ne peut pas penser à un moyen plus propre de réaliser ce dont vous avez besoin. – ArielBH

0

vous pouvez utiliser Trigger pour TextBlock pour vérifier si le texte est nul et réglez la visibilité sur Collapsed dans ce cas.