2011-11-22 73 views
0

我有3 textblocksstackpanelDataTemplate给文本块一个保证金,但只有当有内容

的想法是,格式应该是这样的“ABC”与textblocks,但它可能会发生textblocks“A”和“B”可能是空之间的空间,所以我结束了这样的“C”(在textblock c之前两个空格)。我如何确保我有保证金,但只有在有内容的情况下才有保证金?

回答

3

如果TextBlockVisibility设置为Collapsed,则不会显示Margin。所以我想你可以使用StringToVisibilityConverter来将Visibility设置为Collapsed如果Text为空。

首先,你需要创建一个这样的转换器。

public class StringToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
      return Visibility.Collapsed; 

     if (value != null && string.IsNullOrWhiteSpace(value.ToString())) 
      return Visibility.Collapsed; 

     return Visibility.Visible; 
    } 

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

然后,您需要将此转换器包含到您的xaml中。

<converters:StringToVisibilityConverter x:Key="StringToVisibilityConverter " /> 

最后,使用它你TextBlock内。

<TextBlock x:Name="MyTextBlock" Text="{Binding SomeText}" 
     Visibility="{Binding SomeText, Converter={StaticResource StringToVisibilityConverter}}" /> 

有关如何使用转换器的详细信息,请看一看this post

希望它有帮助。 :)

+0

你有样品吗?我不是那个习惯xaml所以我有点生锈 – Alex

+0

只是增加了一些示例代码:) –

+0

谢谢!它工作得很好! – Alex

0

将一个转换器添加到边距并将其绑定到Text属性。如果文本内容为空,转换器会将边距发送到统一厚度0

0

将文本块放在网格中,以便它们的位置是固定的。将转换器添加到martin并将其绑定到文本属性,如果该文本的长度为零,则将边距设置为零。

相关问题