2009-05-21 2 views
0

저는 WPF에서 매우 새롭습니다. 나는 ListBox를 가지고있어 항목에 대한 템플릿을 설정하고 싶습니다 (Person이라고 부름). TextBlock이 사용됩니다. 그 사람은 공개 등록 정보 : "전경"및 "IsOnline"을 가져야합니다. "IsOnline"이 참이면 사람의 "Foreground"속성을 사용하고 그렇지 않으면 "Gray"속성을 사용합니다. 그게 다야. 첫 번째 템플릿은 다음과 같습니다.WPF : 바인딩 속성을 사용하여 datatemplate 사용자 정의

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}"> 
    <TextBlock Text="{Binding Path=Name}" Foreground="{Binding Path=Foreground}" Margin="1"> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=IsOnline}" Value="False"> 
       <Setter Property="TextBlock.Foreground" Value="Gray" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
</DataTemplate> 

물론 이것은 작동하지 않습니다. 예외는 없지만 기대되는 결과는 아닙니다. 그런 다음 TextBlock에 대해 Trigger를 사용하려고 시도했지만 예외가 발생하여 DataTriggers (EventTriggers 만 사용)를 사용할 수 없습니다.

어떤 조언을 주셔서 감사합니다! :)

답변

3

TextBlock 이름을 지정하고 TargetName이라는 이름으로 설정하십시오.

<DataTemplate x:Key="UnselectedPersonTemplate" DataType="{x:Type o:Person}"> 
    <TextBlock x:Name="tb" Text="{Binding Path=Name}" 
      Foreground="{Binding Path=Foreground}" Margin="1" /> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=IsOnline}" Value="False"> 
      <Setter TargetName="tb" Property="Foreground" Value="Gray" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

고마워요. 이것은 나를 위해 일했다. –

관련 문제