DataGrid 操作についてメモ
DataGridTextColumn
セルのスタイルを編集する場合 DataGridTextColumn.ElementStyleを利用し、スタイルを指定する
<DataGrid> <DataGrid.Columns> <DataGridTextColumn Header="ヘッダー名" Binding="{Binding MyDate,StringFormat=yyyy/MM/dd}" Width="100"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="TextAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
セルをカスタマイズ
DataGridTemplateColumnを利用し、DataTemplateを配置する
<DataGrid> <DataGrid.Columns> <DataGridTemplateColumn Header="ヘッダー名" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding ButtonActionCommand}" >押す/Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
編集可能セルを設定する
DataGridTextColumnでもIsReadOnlyがFalseの場合、ダブルクリックで編集可能だが、カスタムしたい場合、CellEditingTemplateを使用する。 ただし、表示時のTempleteも指定しないと表示されないため、CellTemplateも設定する必要がある。 ※DataGridTemplateColumnではCellEditingTemplateの中にバインドしたものだけが正しくSet処理が実行される。
<DataGrid> <DataGrid.Columns> <DataGridTemplateColumn Header="ヘッダー名" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Text1}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox Text="{Binding Text1}"/> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid>
セルダブルクリックイベントをCommandで受け取る方法
DataGrid.InputBindingsにMouseBindingを設定し、イベントアクションをCommandにつなぐ
<DataGrid> <DataGrid.InputBindings> <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding GridMouseDoubleClickCommand}"/> </DataGrid.InputBindings> </DataGrid>
ヘッダー表示をカスタマイズする。
HeaderTemplateを利用し、ヘッダーを2行表示する。
<DataGrid> <DataGrid.Columns> <DataGridTemplateColumn Header="ヘッダー名" Width="100"> <DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <StackPanel> <TextBlock Text="ヘッダー1行" /> <Separator/> <TextBlock Text="ヘッダー2行" /> </StackPanel> </DataTemplate> </DataGridTemplateColumn.HeaderTemplate> </DataGrid.Columns> </DataGrid>