仅当单击特定的datagrid行时,才使双击事件起作用吗?

时间:2018-07-10 19:00:19

标签: wpf xaml events

我目前有一个数据网格,该网格绑定到xaml的.cs文件中的方法。目标是能够双击给定的行,然后执行任务。但是,我不希望用户能够通过单击一行然后双击数据网格上的其他任何位置来调用该函数。我希望用户只能在双击给定行时才能调用该函数。

谢谢!

1 个答案:

答案 0 :(得分:0)

您尚未真正提供足够的信息来回答这个问题。您是否要在背后的代码中使用事件处理程序?还是项目本身中的ICommand处理程序?后者是您应该使用的,但是由于您没有标记MVVM,因此我假设是前者。

问题是您需要在DataRow样式上设置一个EventSetter,但是无法使用DataTriggers来设置EventSetter,因此您需要在所有所有上进行设置,然后在处理程序(有很多解决方法,但是它开始变得令人费解,这时最好还是切换到MVVM)。声明您的DataGrid并通过RowStyle设置事件处理程序:

<DataGrid ItemsSource="{Binding MyItems}" AutoGeneratingColumn="OnAutoGeneratingColumn">
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <EventSetter Event="MouseDoubleClick" Handler="DataGridRow_MouseDoubleClick" />
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

然后在处理程序中进行检查:

private void DataGridRow_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var row = sender as DataGridRow;
    var dataElement = row?.DataContext as MyItem;
    if (dataElement?.CanDoubleClick != true)
        return;

    // process double-click here
    return;
}