2009-12-03 70 views
0

正文塊自動調整大小/佈局我有以下堆疊面板WPF中的StackPanel

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

和我的AddressLine2字符串是綁定的對象上的空。

我堆棧面板呈現像

| AddressLine1 | 
|    | 
| AddressLine3 | 
| AddressLine4 | 

,但我希望它像渲染

| AddressLine1 | 
| AddressLine3 | 
| AddressLine4 | 

這是可能的,還是我失去了一個明顯的方式做到這一點?

謝謝, 克里斯

回答

2

創建一個實現再IMultiValueConverter用在文本上MultiBinding使您只有一個TextBlock的每行這樣的轉換器:

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(); 
    } 
} 

而在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

您可以通過使用ValueConverter TextBlock的Text屬性的可見性結合

+0

我認爲可能是這種情況 - 看起來很雜亂 - 我真的希望有一點XAML能做到這一點 – Chris 2009-12-03 15:06:42

+0

想不到更清晰的方式來實現你所需要的。 – ArielBH 2009-12-03 15:19:20

0

您可以使用觸發器爲TextBlock的檢查,如果文本爲空,並設置能見度倒塌在這種情況下。