2009-05-21 10 views
0

Ich bin sehr neu in WPF. Ich habe eine ListBox, in der ich eine Vorlage für einen Artikel festlegen möchte (ich nannte es Person). Ein TextBlock soll verwendet werden. Die Person muss öffentliche Eigenschaften: "Vordergrund" und "IsOnline". Wenn "IsOnline" wahr ist, würde ich die Eigenschaft "Vordergrund" der Person verwenden, ansonsten "Grau". Das ist alles. Meine erste Vorlage ist:WPF: Anpassen einer Datamap mit einer Bindungseigenschaft

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

Natürlich ist dies nicht funktioniert. Es gibt keine Ausnahme, aber auch nicht das erwartete Ergebnis. Dann habe ich versucht, den Trigger für den Textblock zu verwenden, aber es wird eine Ausnahme geben, dass ich DataTriggers (nur EventTriggers) dafür nicht verwenden kann.

Danke für jede Beratung! :)

Antwort

3

Geben Sie TextBlock einen Namen und setzen Sie TargetName Eigenschaft des Setter zu diesem Namen.

<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

Vielen Dank. Das hat für mich funktioniert. –

Verwandte Themen