2009-12-03 2 views
0

에있는 TextBlock 자동 크기 조정/레이아웃 WPF 나는 다음과 같은 스택 패널을는 StackPanel에

<StackPanel> 
       <TextBlock Text="{Binding AddressLine1}" /> 
       <TextBlock Text="{Binding AddressLine2}" /> 
       <TextBlock Text="{Binding AddressLine3}" /> 
       <TextBlock Text="{Binding AddressLine4}" /> 
</StackPanel> 

을 내 AddressLine2 문자열 바인딩 된 객체에 null입니다.

내 스택 패널

| AddressLine1 | 
|    | 
| AddressLine3 | 
| AddressLine4 | 

처럼 렌더링하지만 난이 가능

| AddressLine1 | 
| AddressLine3 | 
| AddressLine4 | 

처럼 렌더링 할, 또는 내가 할 수있는 확실한 방법을 놓친 거지?

감사합니다, 크리스

당신은 ValueConverter를 사용하여 텍스트 속성에있는 TextBlock의 가시성을 결합 할 수

답변

2

만 TextBlock을 하나씩 가질 수 있도록 IMultiValueConverter 다음과 같이 각 줄의 텍스트에 MultiBinding을 사용하여 구현하는 컨버터를 만듭니다

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

당신은 텍스트가 null의 경우 확인하기 위해 TextBlock에 대한 트리거를 사용하여 축소에 대한 가시성을 설정할 수 있습니다
+0

나는 그것이 사실일지도 모른다라고 생각했다 - 그것은 매우 혼란스럽게 보인다 - 나는 XAML의 약간이 그것을 할 것이기를 정말로 바라고 있었다 – Chris

+0

당신이 필요로하는 것을 이루기 위해 더 깨끗한 방법을 생각할 수 없다. – ArielBH

0

그럴 경우.