[XAML][WPF] DataGrid のフォーマットの調整

2015年8月5日

 WPF の DataGrid 関連のメモ。
 主に、セルの書式設定に関する設定について。

  1. セルの色を指定する(表示)

     セルの色を指定する場合、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. 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>
    
  3. セルのデータを右寄せにする

     右寄せにするには 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>
    
  4. セルの書式指定

     数値のフォーマット等を指定したい場合は、Binding で StringFormat を指定します。

    <DataGridTextColumn Binding="{Binding Data001,StringFormat=0.00}"/>
    
  5. 列幅変更禁止/ソート禁止/読み取り専用

     表(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"/>
    
  6. 列自動追加禁止

     バインディングしているオブジェクトのメンバーが、勝手に列に新規追加されてしまうのを抑止します。

    <DataGrid AutoGenerateColumns="False">
    





カテゴリー: Program, WPF, xaml

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org