WPF DataGrid自定义行Border空白区域点击时SelectionChanged事件未触发
解决WPF DataGrid自定义行样式点击空白区域不触发SelectionChanged的问题
问题原因
你自定义的DataGridRow模板中,外层Border的空白区域(列内容未覆盖的部分)未关联行的选择逻辑,点击这些区域时,鼠标事件无法触发DataGridRow的选中状态变更,因此不会触发SelectionChanged事件。只有点击单元格内的文本(ContentPresenter承载的内容)时,事件才会传递到行层级触发选择。
解决方案
方法一:通过PreviewMouseLeftButtonDown事件手动选中行
修改自定义行模板中的Border,添加鼠标预览点击事件,在事件处理中手动将当前行设为选中状态:
- 修改XAML中
CustomDataGridRowStyle里的Border:
<Border BorderBrush="{TemplateBinding BorderBrush}" Background="LightGray" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="20" Margin="0,5,0,5" PreviewMouseLeftButtonDown="RowBorder_PreviewMouseLeftButtonDown">
- 在
DataGridSamplePage.xaml.cs中添加事件处理方法:
private void RowBorder_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (sender is Border border) { var targetRow = border.TemplatedParent as DataGridRow; if (targetRow != null && !targetRow.IsSelected) { targetRow.IsSelected = true; e.Handled = true; } } }
方法二:纯XAML实现(无需后台代码)
若不想编写后台代码,可使用EventTrigger结合属性变更实现,需先通过NuGet安装Microsoft.Xaml.Behaviors.Wpf包:
- 在XAML页面顶部添加命名空间:
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
- 修改自定义行模板的
Border:
<Border BorderBrush="{TemplateBinding BorderBrush}" Background="LightGray" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="20" Margin="0,5,0,5"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <i:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource TemplatedParent}}" PropertyName="IsSelected" Value="True"/> </i:EventTrigger> </i:Interaction.Triggers> <!-- 原有SelectiveScrollingGrid内容保持不变 --> </Border>
额外优化:单元格空白区域触发选择
若希望点击单元格内文本周围的空白区域也能触发选择,需修改DataGridCell模板,给内部Border设置Background="Transparent"(默认空背景不会捕获鼠标事件):
<ControlTemplate TargetType="{x:Type DataGridCell}"> <Border BorderThickness="0" Padding="5" Background="Transparent"> <ContentPresenter /> </Border> </ControlTemplate>
效果验证
修改完成后,点击行Border范围内的任意区域(包括空白区域、单元格空白、文本),都会触发DataGrid的SelectionChanged事件,控制台将输出MyDataGrid_OnSelectionChanged fired。
内容的提问来源于stack exchange,提问作者esege
相关产品推荐
相关产品推荐

