WPF DataGrid找不到CellContentClick事件及行内按钮实现问题
问题解答
关于CellContentClick事件
CellContentClick是WinForm平台DataGridView控件的专属事件,WPF框架下的DataGrid控件没有这个事件,你在属性面板找不到该选项是正常情况。WPF中实现行内按钮交互不需要依赖该事件,直接给按钮绑定Click事件或者命令即可,你现有代码中为按钮添加Click处理的写法本身是可行的。
目标布局实现方法
你需要的两个交互效果完全可以实现,调整方式如下:
- 开启DataGrid自带的新增占位行功能,为DataGrid附加属性
CanUserAddRows="True",开启后控件底部会自动生成一个空白的新增行。 - 将现有分散的三个操作按钮合并到同一个
DataGridTemplateColumn中,通过行状态触发器判断当前行是否为新增行,自动控制不同按钮的显示与隐藏:- 已存在数据的普通行:隐藏新增(+)按钮,仅显示编辑、删除按钮
- 底部空白新增行:隐藏编辑、删除按钮,仅显示新增(+)按钮
调整后的操作列XAML代码参考如下,替换你现有三个独立的模板列即可:
<DataGridTemplateColumn Header="操作"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button x:Name="btnAdd" Content="+" FontWeight="ExtraBold" Click="AddUser_Click" Visibility="Collapsed"/> <Button x:Name="btnEdit" Content="🔧" FontWeight="ExtraBold" Click="EditUser_Click" Margin="4,0"/> <Button x:Name="btnDelete" Content="🗑" FontWeight="ExtraBold" Click="DeleteUser_Click"/> </StackPanel> <DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=IsNewItem}" Value="True"> <Setter TargetName="btnAdd" Property="Visibility" Value="Visible"/> <Setter TargetName="btnEdit" Property="Visibility" Value="Collapsed"/> <Setter TargetName="btnDelete" Property="Visibility" Value="Collapsed"/> </DataTrigger> </DataTemplate.Triggers> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
注意事项
- 你当前设置的
IsReadOnly="True"属性不会影响按钮点击和新增行功能,只要绑定的数据源集合支持新增操作(例如使用ObservableCollection<T>作为数据源),底部空白新增行就会正常显示。 - 你现在所有行都同时显示三个按钮,原因是没有针对行类型做按钮显隐区分,加上上述触发器逻辑后就能达到预期效果。

内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

