2015-04-25 61 views
1

我有一個DataGrid,數據綁定到DataTable並設置爲自動生成列。設置DataGridCell樣式取決於CheckBox在DataGridTemplateColumn中檢查狀態

第一列的布爾數據類型已由DataTemplate中的CheckBox替換爲DataGridTemplateColumn。它一切正常。

但是,現在我想讓DataGridCell背景在未選中CheckBox時變爲紅色。

問題是,我不知道如何設置CheckBox的父DataGridCell樣式與IsChecked觸發器。

WPF:

<Window.Resources> 
    <DataGridTemplateColumn x:Key="colSelect"> 

     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox Name="chkBxSelect" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        IsChecked="{Binding Path=Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
        Click="chkBxSelect_Click"> 
       </CheckBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 

     <DataGridTemplateColumn.HeaderTemplate> 
      <DataTemplate> 
       <CheckBox x:Name="chkBxSelectAll" 
        Content="Select" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        IsThreeState="True" 
        Click="chkBxSelectAll_Click" 
        IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.SelectAll}"> 
        </CheckBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.HeaderTemplate> 

     <DataGridTemplateColumn.CellStyle> 
      <Style TargetType="{x:Type DataGridCell}"> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter Property="Foreground" Value="White"></Setter> 
         <Setter Property="Background" Value="DarkGray"></Setter> 
         <Setter Property="BorderBrush" Value="Red"></Setter> 
         <Setter Property="BorderThickness" Value="1"></Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </DataGridTemplateColumn.CellStyle> 
    </DataGridTemplateColumn> 
</Window.Resources> 

C#,同時DataGrid列AutoGenerating:

DataGridTemplateColumn col = (DataGridTemplateColumn)Resources["colSelect"]; 
    e.Column = col; 
    e.Column.IsReadOnly = false; 

更新: 到目前爲止,我已經想通了,它可以在使用RelativeSourceAncestorType完成捆綁。但是,仍然試圖使其工作。

回答

1

那麼經過很多努力,甚至沒有嘗試最明顯的解決方案。我找到了。這相對非常簡單和容易。

只是添加DataTrigger到DataGridCell風格和所有完成,WPF是魔術。

<DataGridTemplateColumn.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="true"> 
       <Setter Property="Foreground" Value="White"></Setter> 
       <Setter Property="Background" Value="DarkGray"></Setter> 
       <Setter Property="BorderBrush" Value="Red"></Setter> 
       <Setter Property="BorderThickness" Value="1"></Setter> 
      </Trigger> 
      <DataTrigger Binding="{Binding Path=Select, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Value="False"> 
       <Setter Property="Background" Value="Red"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGridTemplateColumn.CellStyle> 
相關問題