我想在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的代码是什么,以及如何使用它?