C# WPF如何禁用DataGrid的双击事件
禁用WPF DataGrid的双击事件
以下是几种实用的实现方案,按需选择即可:
方法1:直接绑定MouseDoubleClick事件拦截行为
在你的DataGrid标签中添加事件绑定,通过后台代码标记事件为已处理,阻止默认双击逻辑触发:
修改后的XAML代码
<DataGrid HeadersVisibility="Column" d:ItemsSource="{d:SampleData}" ItemsSource="{Binding CbVendorItems}" SelectedItem="{Binding SelectedVendor}" MinWidth="100" MaxHeight="Infinity" Margin="10,5,10,5" VerticalAlignment="Top" FontSize="16" FontFamily="../Fonts/#GeForce-Bold" Visibility="{Binding VendorVis}" AutoGenerateColumns="False" Style="{DynamicResource DataGridStyle}" MouseDoubleClick="DataGrid_MouseDoubleClick"> <!-- 添加事件绑定 --> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <DataGridCheckBoxColumn Header="Release?" Binding="{Binding IsChecked, Mode=TwoWay}" /> <DataGridTextColumn Header="Password" Binding="{Binding PasswordTextInput}" /> <DataGridTextColumn Header="Status" Binding="{Binding Status}" /> <DataGridTemplateColumn Header="Progress" Width="150"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" Visibility="{Binding ProgressVis}" Background="#FF1A1A1A" BorderBrush="#FF76B900" Margin="2"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="%" Visibility="{Binding ProgressVis}" Binding="{Binding ProgressPercent}"/> <DataGridTextColumn Header="File Passed" Binding="{Binding FilePassed}" Width="*" Visibility="{Binding ProgressVis}"/> </DataGrid.Columns> </DataGrid>
后台C#处理代码
private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e) { // 标记事件已处理,阻断后续默认双击行为 e.Handled = true; }
方法2:通过样式全局拦截(无需额外后台代码)
如果偏好纯XAML实现,可以在DataGrid的Style中添加EventSetter直接拦截事件:
<Style x:Key="DataGridStyle" TargetType="DataGrid"> <!-- 保留你原有的样式配置 --> <EventSetter Event="MouseDoubleClick" Handler="DataGrid_MouseDoubleClick"/> </Style>
对应的后台处理函数和方法1一致。
补充:仅禁用密码列的双击
如果你的需求是仅阻止密码列的双击(而非整个DataGrid),可以针对密码列的单元格单独设置拦截:
<DataGridTextColumn Header="Password" Binding="{Binding PasswordTextInput}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <EventSetter Event="MouseDoubleClick" Handler="PasswordCell_MouseDoubleClick"/> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn>
后台处理代码:
private void PasswordCell_MouseDoubleClick(object sender, MouseButtonEventArgs e) { e.Handled = true; }
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

