如何解决在WPF DataGrid中添加按钮并与之交互
我想在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.VisualTreeHelper 可能用于 迭代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);
您可以在此处查看更多详细信息:What is the code behind for datagridtemplatecolumn,and how to use it?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。