2012-05-27 44 views
2

我試圖讓IsSelectionActive與WPF DataGrid的工作:如何獲取WPF DataGrid的IsSelectionActive?

<Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <ContentPresenter /> 
       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelectionActive" Value="False" /> 
          <Condition Property="IsSelected" Value="True" /> 
          <!--<Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True" /> 
          <Condition Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=IsKeyboardFocusWithin}" Value="True" />--> 
         </MultiTrigger.Conditions> 

基本上,當焦點失去了電網,但選擇仍然存在,我想申請一些造型。

不幸的是,IsSelectionActive由於某種原因拋出了它不存在於WPF數據網格中的錯誤。

回答

3

IsSelectionActive是一個附加屬性。我認爲你需要使用

<Condition Property="Selector.IsSelectionActive" Value="False" /> 

這種簡化的風格的作品對我來說:

<Style x:Key="CellStyle" TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="Selector.IsSelectionActive" Value="False" /> 
       <Condition Property="IsSelected" Value="True" /> 
      </MultiTrigger.Conditions> 
      <Setter Property="Background" Value="Red"/> 
     </MultiTrigger> 
    </Style.Triggers> 
</Style> 
+0

這就是它!你能解釋爲什麼我們需要使用這個'Selector.',而我們不需要它的幾個屬性? – Tower

+0

@rFactor:該樣式是針對具有依賴項屬性IsSelected的DataGridCell。沒有IsSelectionActive屬性。 Selector類(來自ItemsControl,ListBox的基類,DataGrid等,支持選擇的任何東西)具有隻讀屬性IsSelectionActive(以及附屬屬性IsSelected等)。因此,您需要指定Selector.IsSelectionActive,就像您使用Grid.Row =「1」,它是由網格定義的附加屬性,而不是網格中項目的屬性。 – Phil

相關問題