WPF中的StackPanel

WPF中的StackPanel

问题描述:

正文块自动调整大小/布局我有以下堆叠面板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 | 

这是可能的,还是我失去了一个明显的方式做到这一点?

谢谢, 克里斯

创建一个实现再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> 

您可以通过使用ValueConverter TextBlock的Text属性的可见性结合

+0

我认为可能是这种情况 - 看起来很杂乱 - 我真的希望有一点XAML能做到这一点 – Chris 2009-12-03 15:06:42

+0

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

您可以使用触发器为TextBlock的检查,如果文本为空,并设置能见度倒塌在这种情况下。