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属性的可见性结合
答
您可以使用触发器为TextBlock的检查,如果文本为空,并设置能见度倒塌在这种情况下。
我认为可能是这种情况 - 看起来很杂乱 - 我真的希望有一点XAML能做到这一点 – Chris 2009-12-03 15:06:42
想不到更清晰的方式来实现你所需要的。 – ArielBH 2009-12-03 15:19:20