Blog スタッフブログ

WPF システム開発

[WPF][C#]DataGridの特定セルに動的にボタン追加

やり方

  • 動的にボタン追加するので、複数追加可能なように、DataGridのカラム内に、StackPanelで箱を作る。(レイアウト)
  • 対象のDataGridのセルを取得(コード)
  • セルからStackPanel取り出す(コード)
  • StackPanelにコードで作成したボタンを追加する(コード)

参考

  【WPF】ここまで出来る!DataGridで多段表示!(DataGridTemplateColumn編)

  WPFのDataGridのセルを取得する。

  WPF VisualStudio2010のDataGridのセルにアクセスする方法

  [WPF] DataTemplateの中のコントロール取得

  WPF:動的に配置したボタンにイベントを定義

サンプル

<DataGrid
    Name="SampleDataGrid">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" >
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
// 選択された行のデータ取得
var row = SampleDataGrid.ItemContainerGenerator.ContainerFromIndex(SampleDataGrid.SelectedIndex) as DataGridRow;
// その行の0番目のセル取得
var cell = SampleDataGrid.Columns[0].GetCellContent(row);
// StackPanelの取得(GetElementは参考サイト参照)
StackPanel stackPanel = GetElement<StackPanel>(cell);

// ボタンの作成
Button button = new Button();
// 諸々の設定を行う
// 省略

// stackPanelにボタンの追加
stackPanel.Children.Add(button);