2012-07-26 43 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中

相關問題