2012-07-26 51 views
0

我已经定义了一个触发器的数据模板,如果选择该项目,它应该简单地更改背景颜色。由于某种原因,它似乎没有工作。DataTemplateTrigger不与数据模板选择器一起工作

 <DataTemplate x:Key="existingDeviceTemplate" > 
      <StackPanel Orientation="Horizontal"> 
       <Border Name="bd" Background="Green" BorderThickness="1" Padding="5"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition/> 
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
          <ColumnDefinition /> 
         </Grid.ColumnDefinitions> 

         <TextBlock Grid.Column="0" Text="{Binding Path=Name}" Width="200"/> 
         <Button Grid.Column="1" Content="Settings" Click="cmdSettings_Clicked"/> 
         <Button Grid.Column="2" Content="Delete" Click="cmdDelete_Clicked"/> 
        </Grid> 
       </Border> 
      </StackPanel> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding IsSelected}" Value="true" > 
        <Setter TargetName="bd" Property="Background" Value="Red"/> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
+0

任何绑定错误?什么控制使用这个DataTemplate? – LPL 2012-07-26 14:33:29

+0

这是一个列表控件,它看起来像我必须在样式表中设置样式,并使用数据模板选择器来决定如何显示不同的行。 – user1145533 2012-07-26 15:48:18

回答

1

尝试绑定到ListBoxItemIsSelected属性:

<DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" Value="true"> 
      <Setter TargetName="bd" Property="Background" Value="Red" /> 
    </DataTrigger> 
</DataTemplate.Triggers> 

如果你的列表控件是一个ListView你有x:Type ListViewItem更换x:Type ListBoxItem

+1

我认为你是对的,当前代码绑定到'ListBoxItem.DataContext.IsSelected',它听起来像OP想要绑定到'ListBoxItem.IsSelected',而在这种情况下,这个触发器应该工作:) – Rachel 2012-07-27 23:57:26

1

您的绑定模型是否有名为IsSelected的属性? 我的猜测是你的意思是行的IsSelected属性。 如果是这种情况,你需要把一个与FindAncestor的RelativeSource绑定到ListItem中