You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:12:45