1

私は WPF Caliburn.Micro アプリケーションを持っています。以前は DataGrid がありましたが、コードの一部を次に示します。

<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>

各行の背景色が Status フィールドの値にバインドされ、ダブルクリック イベントが処理されることがわかります。FlexGrid は ItemContainerStyle を認識していないように見えるため、ComponentOne の FlexGrid に移行する方法がわかりません。

これで私を助けてもらえますか?ありがとう。

4

2 に答える 2

1

CellFactoryクラスとICellFactoryインターフェイスをご覧になりましたか。これを使用して、プロジェクトの1つでアイテムのステータスに応じて異なる背景色を設定しました。

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
于 2012-10-22T10:08:08.803 に答える
1

C1 FlexGrid は、パフォーマンス上の理由から少し「WinFormsy」を行い、DependencyProperties、またはスタイル/テンプレートを利用しないため、データ トリガーを使用して行の背景を設定したり、必要に応じてコマンドをイベントに設定したりすることはできません。彼らの提案は、Cell の mouseclick イベントを使用して、すべてをコードで処理することです。

私の提案は、可能であれば、WPF 4.0 の DataGrid に戻り、ICollectionView にバインドして、その Filtering function を利用することです。コレクション ビューの操作に関する Bea Stollnitz のチュートリアルの多くがリンクされています。

于 2012-08-08T20:34:42.077 に答える