0

我有以下堆栈面板

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

这是可能的,还是我错过了一个明显的方法?

谢谢,克里斯

4

3 回答 3

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>
于 2009-12-03T19:52:41.577 回答
0

您可以使用 ValueConverter 将 TextBlock 的 Visibility 绑定到 Text 属性

于 2009-12-03T15:01:26.300 回答
0

您可以使用 TextBlock 的 Trigger 来检查 Text 是否为空,并在这种情况下将 Visibility 设置为 Collapsed。

于 2009-12-03T19:44:52.233 回答