我在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
。任何帮助将受到高度赞赏。
答案 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对象来完成此操作。首先你必须找到它:
DataGridCell
DataGridColumn.GetCellContent
VisualTreeHelper
将可视树扫描到DataGridCell
完成此操作后,有几种方法可以向DataGridCell添加按钮,具体取决于您要实现的目标:
DataGridCell.Template
设置为包含所需按钮和其他样式的ControlTemplate,-OR - DataGridCell.ContentTemplate
设置为包含所需按钮和其他项目的DataTemplate,-OR- DataTemplate
包含一个占位符面板来保存新按钮,按Name
向下搜索此面板的可视树,然后将按钮添加到其中。不需要查找单元格的替代方法是:
ObservableCollection<T>
属性,用于提供创建按钮的信息DataTemplate
中添加引用此媒体资源的ItemsControl
,并DataTemplate
可以创建T
ObservableCollection
属性