How to hide the empty TextBlock?

前端 未结 3 817
迷失自我
迷失自我 2020-12-08 00:10

In the XAML provided below, I don\'t have the value for Phone sometimes. When that happens, the value is missing, but the TextBlock is still occupying the space

相关标签:
3条回答
  • 2020-12-08 00:33

    You probably need to use:

    <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property="Text" Value="">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
    </Style>
    

    or maybe both:

    <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property="Text" Value="">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
                <Trigger Property="Text" Value="{x:Null}">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
    </Style>
    
    0 讨论(0)
  • 2020-12-08 00:55

    Instead of introducing a style just for this, for this sort of thing I tend to prefer using a converter that will handle a null or empty string.

    <TextBlock Text="{Binding Foo}"
               Visibility="{Binding Foo, 
                            Converter={StaticResource StringToVisibilityConverter}}" />
    

    Where StringToVisibilityConverter is defined like this:

    [ValueConversion(typeof(string), typeof(Visibility))]
    public class StringToVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (string.IsNullOrEmpty((string)value))
            {
                return Visibility.Collapsed;
            }
            else
            {
                return Visibility.Visible;
            }
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    
    0 讨论(0)
  • 2020-12-08 00:56

    You can use a DataTrigger:

    <TextBlock Text="{Binding Path=Title}">
        <TextBlock.Style>
           <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Title}" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
           </Style>
        </TextBlock.Style>
    </TextBlock>
    
    0 讨论(0)
提交回复
热议问题