2012-08-07 69 views
1

我有一個WPF Caliburn.Micro應用程序。我曾經有一個DataGrid,這裏是代碼的一部分:ComponentOne的FlexGrid背景顏色

<DataGrid x:Name="FirstEntries" Grid.Row="5" 
     AutoGenerateColumns="False" 
     BaseControls:DataGridExtension.Columns="{Binding FirstEntryGridColumns}" 
     CanUserAddRows="False" IsReadOnly="True" 
     SelectedItem="{Binding Path=SelectedFirstEntry}"> 
    <DataGrid.Resources> 
     <conv:StatusToBackgroundColorConverter x:Key="StatusToBackgroundColor"/> 
    </DataGrid.Resources> 
    <DataGrid.ItemContainerStyle> 
     <Style TargetType="{x:Type DataGridRow}"> 
      <Style.Setters> 
       <Setter Property="Background" Value="{Binding Path=Status, Converter={StaticResource StatusToBackgroundColor}}"></Setter> 
       <Setter Property="cal:Message.Attach" Value="[Event MouseDoubleClick] = [Action OnDoubleClickFirstEntry($dataContext)]"/> 
      </Style.Setters> 
     </Style> 
    </DataGrid.ItemContainerStyle> 

你可以看到,每行的背景顏色,勢必狀態字段值,雙擊事件處理。現在我正在遷移到ComponentOne的FlexGrid,並且我不知道如何在那裏實現同樣的功能,因爲FlexGrid似乎並不知道ItemContainerStyle。

你能幫我解決嗎? 謝謝。

回答

1

C1由於性能方面的原因,FlexGrid做了一些小小的「WinFormsy」,並且不使用DependencyProperties或styles/templates,因此您不能使用數據觸發器設置行背景或將命令設置爲您所期望的事件。他們的建議是使用Cell的鼠標點擊事件來處理所有代碼。

我的建議,如果可能的話,是回到WPF 4.0的DataGrid並綁定to an ICollectionView to utilize it's Filtering function。鏈接了很多Bea Stollnitz的操作集合視圖的教程。

+0

謝謝,我會試試看。 – 2012-08-08 20:35:33

1

你吃過看看CellFactory類和ICellFactory接口。 我用它來設置不同的背景顏色,這取決於我的一個項目中的項目狀態。

Public Overrides Sub CreateCellContent(grid As C1.WPF.FlexGrid.C1FlexGrid, bdr As Border, rng As C1.WPF.FlexGrid.CellRange) 
     MyBase.CreateCellContent(grid, bdr, rng) 

     Dim infPre As InfPresenterTextEntity 
     infPre = CType(grid.Rows(rng.Row).DataItem, InfPresenterTextEntity) 

     If Not infPre Is Nothing Then 
      If infPre.IsNew Then 
       grid.Rows(rng.Row).Background = Brushes.LightGreen 
      ElseIf infPre.IsDirty Then 
       grid.Rows(rng.Row).Background = Brushes.LightYellow 
      End If 

      'grid.AutoSizeRow(rng.Row, 0) 
      'grid.AutoSizeRows(rng.Row, rng.Row, 0) 
     End if 
End Sub