WPF の DataGrid 関連のメモ。
主に、セルの書式設定に関する設定について。
- セルの色を指定する(表示)
セルの色を指定する場合、ElementStyle に Style を設定します。
DataGridTextColumn の場合 ElementStyle に TextBlock の Style を与えます。
今回は、Background を "Red" と固定で設定しているので当該列すべてが赤表示になります。各行ごとに色を変えたい場合は Binding してやればよいです。
<DataGrid> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Data001}"> <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}"> <!--赤で表示 --> <Setter Property="Background" Value="Red"/> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn>
- 2.セルの色を指定する(編集中)
1.の方法だと、編集モードになると色がデフォルトに戻ってしまいます。
編集中も同じ色、あるいはデフォルトとは違う色にしたい場合は EditingElementStyle を操作します。
編集中はターゲットが TextBlock から TextBox に変わっている点も注意です。<DataGrid> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Data001}"> <DataGridTextColumn.EditingElementStyle> <Style TargetType="{x:Type TextBox}"> <!--編集中は黄色で表示 --> <Setter Property="Background" Value="Yellow"/> </Style> </DataGridTextColumn.EditingElementStyle> </DataGridTextColumn>
- セルのデータを右寄せにする
右寄せにするには CellStyle を操作します。
上記1,2で設定した ElementStyle, EditingElementStyle でも可能ですが、それぞれに設定する必要があるので面倒です。<DataGrid> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Data001}"> <DataGridTextColumn.CellStyle> <Style TargetType="{x:Type DataGridCell}"> <Setter Property="HorizontalAlignment" Value="Stretch" /> <Setter Property="TextBlock.TextAlignment" Value="Right"/> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn>
- セルの書式指定
数値のフォーマット等を指定したい場合は、Binding で StringFormat を指定します。
<DataGridTextColumn Binding="{Binding Data001,StringFormat=0.00}"/>
- 列幅変更禁止/ソート禁止/読み取り専用
表(DataGrid)全体で制限する場合は DataGrid の属性を変更します。列幅変更禁止は CanUserResizeColumns、ソート禁止は CanUserSortColumns を操作します。読み取り専用にする場合は、IsReadOnly を操作します。
列個別で設定する場合は DataGridTextColumn の属性を変更します。列幅変更禁止は CanUserResize、ソート禁止は CanUserSort を操作します。読み取り専用にする場合は、IsReadOnly を操作します。表(DataGrid)全体
<DataGrid CanUserResizeColumns="False" CanUserSortColumns="False" IsReadOnly="True">
列個別で設定
<DataGridTextColumn Binding="{Binding Data001}" CanUserResize="False" CanUserSort="False" IsReadOnly="True"/>
- 列自動追加禁止
バインディングしているオブジェクトのメンバーが、勝手に列に新規追加されてしまうのを抑止します。
<DataGrid AutoGenerateColumns="False">