code

빈 텍스트 블록을 숨기는 방법

starcafe 2023. 4. 13. 20:59
반응형

빈 텍스트 블록을 숨기는 방법

아래 XAML에서 Phone에 대한 값이 없을 수 있습니다.이 경우 값은 누락되지만TextBlock가 아직 패널 공간을 점유하고 있습니다.나는 빈칸으로 숨고 싶다TextBlock의 공간을 차지하지 않고StackPanel.

XAML은 다음과 같습니다.

<StackPanel>
    <TextBlock Text="{Binding Path=FirstName}" />
    <TextBlock Text="{Binding Path=LastName}" />
    <TextBlock Text="{Binding Path=Phone}" />
    <TextBlock Text="{Binding Path=Email}" />
</StackPanel>

기사를 읽었습니다만, 납득이 가는 회답이 되지 않습니다.

<StackPanel>
    <TextBlock Text="{Binding Path=FirstName}" />
    <TextBlock Text="{Binding Path=LastName}" />
    <TextBlock Text="{Binding Path=Phone}">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <Trigger Property="Text" Value="{x:Null}">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <TextBlock Text="{Binding Path=Email}" />
</StackPanel>

제가 어딘가에서 실수를 하고 있는 건가요, 아니면 받아들여진 답이 틀린 건가요?목표를 달성하려면 어떻게 해야 할까요?

다음을 사용해야 할 수 있습니다.

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

또는 둘 다:

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

이것만을 위한 스타일을 도입하는 것이 아니라 늘 문자열이나 빈 문자열을 처리하는 컨버터를 사용하는 것을 선호합니다.

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

어디에StringToVisibilityConverter는 다음과 같이 정의됩니다.

[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();
    }
}

를 사용할 수 있습니다.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>

언급URL : https://stackoverflow.com/questions/5573864/how-to-hide-the-empty-textblock

반응형