2009-05-21 1 views
0

Я очень новичок в WPF. У меня есть ListBox, где я хочу установить шаблон для элемента (я назвал его Person). Должен использоваться TextBlock. У человека должны быть открытые свойства: «Foreground» и «IsOnline». Если «IsOnline» истинно, я использовал бы свойство «Переднего плана» человека, иначе «Серый». Это все. Мой первый шаблон: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> 

Конечно, это не работает. Не исключение, но также не ожидаемый результат. Затем я попытался использовать Trigger для TextBlock, но будет исключение, что я не могу использовать DataTriggers (только EventTriggers) для этого.

Спасибо за любой совет! :)

ответ

3

Дайте TextBlock имя и установите TargetName property setter на это имя.

<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

Большое спасибо. Это сработало для меня. – 2009-05-21 06:35:44