2011-06-14 3 views
5

화면에 숫자를 표시하려고합니다. 숫자가 0이면 전혀 표시하고 싶지 않습니다.변환기를 사용하는 대신 TextBlock 트리거

<TextBlock Text="{Binding Path=Class.Count}" FontSize="20" FontWeight="Bold"> 
    <TextBlock.Triggers> 
     <DataTrigger Binding="{Binding Path=Class.Count}" Value="0"> 
      <Setter Property="TextBlock.Text" Value=""/> 
     </DataTrigger> 
    </TextBlock.Triggers> 
</TextBlock> 

정기적 인 트리거가 내 문제를 해결하지 못한 후에 위 코드를 시도했습니다. 한 특정 번호에 따라 행동하는 변환기를 작성하고 싶지 않습니다. 그것이 0 인 경우 번호를 숨길 트리거를 만드는 방법이 있습니까?

편집 : 일반 트리거 또는 데이터 트리거를 사용하려고하면 이벤트 트리거를 사용해야한다는 xaml 구문 분석 오류가 발생합니다.

나는 갖는 빈 값이 당신은 텍스트 속성을 설정하는 바인딩과 싸우고있는 문제

답변

8

의 원인이되지 않았 음을 확인하기 위해 숫자로 세터의 값을 설정했습니다.

텍스트를 String.Empty로 설정하는 대신 컨트롤이 축소/숨김으로 설정됩니다.

혼동이 적습니다.

편집

<TextBox> 
    <TextBox.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Name.Length}" Value="0"> 
        <Setter Property="UIElement.Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

또는

<TextBox> 
    <TextBox.Style> 
     <Style TargetType="TextBox"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Name.Length}" Value="0"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
  1. 만 스타일 DataTriggers 수 있습니다.
  2. xaml 파서는 속성의 존재를 확인하여 ownertype이 필요합니다. 가시성은 UIElement 클래스에서 선언됩니다. 두 예제 모두에서 설명한대로이를 지정하는 두 가지 방법이 있습니다.
+0

이미 생각했지만 TextBlock에는 가시성 속성이 없습니다. TextBlock을 다른 컨트롤 안에 캡슐화 할 수는 있지만 그렇게 단순한 것으로 보이는 것에 대한 복잡성을 피하려고합니다. –

+0

작업 예제를 추가했습니다. –

+0

정확히 같은 것을 작성했지만 'Control.Visibility'대신 'FrameworkElement.Visibility'가 있고 스타일을 사용하지 않았습니다. 일단 텍스트 블록에 스타일을 추가하면 코드가 완벽하게 작동합니다. 그게 왜 내가이 문제에 부딪히지 않는지 나중에 설명해 주시겠습니까? –

관련 문제