wpf 텍스트 블록 스택 패널의 자동 규모/레이아웃
-
12-09-2019 - |
문제
다음 스택 패널이 있습니다
<StackPanel>
<TextBlock Text="{Binding AddressLine1}" />
<TextBlock Text="{Binding AddressLine2}" />
<TextBlock Text="{Binding AddressLine3}" />
<TextBlock Text="{Binding AddressLine4}" />
</StackPanel>
그리고 내 주소 라인 2 문자열은 바운드 객체에서 null입니다.
내 스택 패널은 렌더링됩니다
| AddressLine1 |
| |
| AddressLine3 |
| AddressLine4 |
그러나 나는 그것이 렌더링하기를 원합니다
| AddressLine1 |
| AddressLine3 |
| AddressLine4 |
이것이 가능합니까, 아니면 명백한 방법을 놓치고 있습니까?
고마워요, 크리스
해결책
ImultivalueConverter를 구현하는 변환기를 만듭니다. 그런 다음 텍스트의 멀티 핀딩을 사용하여 다음과 같이 각 줄에 하나의 텍스트 블록 만 갖습니다.
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의 트리거를 사용하여 텍스트가 null인지 확인 하고이 경우 붕괴 된 가시성을 설정할 수 있습니다.
제휴하지 않습니다 StackOverflow