我是WPF的新手。我有一个ListBox,我想为一个项目设置一个模板(我称之为Person)。将使用TextBlock。该人必须使用公共属性:“Foreground”和“IsOnline”。如果“IsOnline”为真,我会使用该人的“前景”属性,否则为“灰色”。就这样。我的第一个模板是:
<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 for TextBlock,但会有一个异常,我不能使用DataTriggers(只有EventTriggers)。
感谢您的任何建议! :)
答案 0 :(得分:4)
为您的TextBlock
命名,并将setter的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>