datagridtemplatecolumn背后的代码是什么,以及如何使用它?

时间:2009-11-18 09:02:12

标签: wpf datagrid datagridtemplatecolumn

我在WPF中有一个DataGrid。我试图将Button添加到网格的某些单元格,然后绑定到特定的ItemsSource。我试图在xaml中这样做:

<dg:DataGridTemplateColumn x:Name="R1" CanUserReorder="False" IsReadOnly="False">             
    <dg:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <awc:ImageButton Content="Edit" Name="btnEdit" Visibility="Collapsed"/>
        </DataTemplate>
    </dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>

但是,我想知道如何在后面的代码中执行此操作。我需要这个,以便每当发生特定点击时我都可以放置Button。任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:26)

使用它:

DataGridTemplateColumn col1 = new DataGridTemplateColumn();
col1.Header = "MyHeader";
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(CheckBox));
Binding b1 = new Binding("IsSelected");
b1.Mode = BindingMode.TwoWay;
factory1.SetValue(CheckBox.IsCheckedProperty, b1);
factory1.AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(chkSelect_Checked));
DataTemplate cellTemplate1 = new DataTemplate();
cellTemplate1.VisualTree = factory1;
col1.CellTemplate = cellTemplate1;
dgTransportReqsts.DataGrid.Columns.Add(col1);

我用它在运行时在我的DataGridTemplateColumn中添加CheckBox。 希望这会有所帮助!!

答案 1 :(得分:3)

如果您想在网格实例化之前添加按钮,特别是在将列添加到网格之前,Anurag的答案将非常适合您。

如果要在网格已构建之后将按钮添加到网格单元格,则可以通过更改DataGridCell对象来完成此操作。首先你必须找到它:

  1. 使用DataGridCell
  2. 查找DataGridColumn.GetCellContent
  3. 使用VisualTreeHelper将可视树扫描到DataGridCell
  4. 完成此操作后,有几种方法可以向DataGridCell添加按钮,具体取决于您要实现的目标:

    • DataGridCell.Template设置为包含所需按钮和其他样式的ControlTemplate,-OR -
    • DataGridCell.ContentTemplate设置为包含所需按钮和其他项目的DataTemplate,-OR-
    • 让您的专栏DataTemplate包含一个占位符面板来保存新按钮,按Name向下搜索此面板的可视树,然后将按钮添加到其中。

    不需要查找单元格的替代方法是:

    1. 在视图模型中包含ObservableCollection<T>属性,用于提供创建按钮的信息
    2. DataTemplate中添加引用此媒体资源的ItemsControl,并DataTemplate可以创建T
    3. 类型的正确按钮
    4. 如果要添加按钮,只需将项目添加到ObservableCollection属性
    5. 即可