添加WPF数据网格中的按钮并与之交互



我想在DataGrid的每一行中添加一个按钮,应该以编程方式禁用/重命名该按钮。

我发现,有可能添加一个按钮做以下事情:

<DataGrid x:Name="dataGrid_newViews" ItemsSource="{Binding}" AutoGenerateColumns="True" CanUserAddRows="false" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btn_installSnippet" Click="btn_installSnippet_Click">Install</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

当我尝试做类似的事情时

btn_installSnippet.Content = "abc";

我确实收到了错误消息,该名称在当前上下文中不存在。。。

有人能给我一个提示吗,我做错了什么?

XAML中的DataTemplate定义:

<Window 
... 
MouseDoubleClick="Window_MouseDoubleClick">
<Grid>
<Grid.Resources>
<DataTemplate x:Key="ButtonTemplate" >
<Button x:Name="btn_installSnippet" Click="btn_installSnippet_Click">Install</Button>
</DataTemplate>
</Grid.Resources>
<DataGrid x:Name="dataGrid_newViews" ItemsSource="{Binding}" AutoGenerateColumns="True" CanUserAddRows="True" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Button" CellTemplate="{StaticResource ButtonTemplate}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

在代码后面添加新行:

private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
dataGrid_newViews.Items.Add("a new item");         
}

注意:System.Windows.Media.VVisualTreeHelper可能用于迭代DataGrid中的所有元素以找出所需的控件。

为了最大限度地控制,您可以在代码背后执行所有操作:

DataGridTemplateColumn column = new DataGridTemplateColumn();
column.Header = "NewColumn";
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(Button));
string content = "MyContent";
factory.SetValue(Button.ContentProperty, content);
DataTemplate cellTemplate = new DataTemplate();
cellTemplate.VisualTree = factory;
column.CellTemplate = cellTemplate;
dg1.Columns.Add(column);

您可以在这里看到更多详细信息:datagridtemplatecolumn的代码是什么,以及如何使用它?

最新更新