ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

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>