Подтвердить что ты не робот

WPF datagrid выбранное событие с нажатием клавиши?

Я хочу выполнить некоторый код, когда дважды щелкнул выбранную строку WPF DataGrid. Я знаю, что datagrid имеет событие MouseDoubleClicked и что он также имеет событие, выбранное для строки, но я не вижу никакого события для "выбранной строки с двойным щелчком"...

Считаете ли вы возможным каким-то образом захватить это событие?

4b9b3361

Ответ 1

вы можете добавить обработчик событий в ItemContainerStyle (который является стилем, применяемым к строке):

<DataGrid ... >
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
        </Style>
    </DataGrid.ItemContainerStyle>
    ...
</DataGrid>

Затем в обработчике вы можете проверить, выбрана ли строка

private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
    // execute some code
}

Ответ 2

Этот вопрос подошел ко мне, ища решение, и ответы не сработали, будь то из-за возраста или моей собственной реализации. В любом случае, вот решение, которое сработало для меня.

Добавить событие MouseDoubleClick в DataGrid

        <DataGrid x:Name="DatagridMovie"
              Width="Auto"
              CanUserAddRows="False"
              CanUserDeleteRows="True"
              IsReadOnly="true"
              ItemsSource="{Binding}"
              MouseDoubleClick="Row_MouseDoubleClick">

и в методе

private void Row_MouseDoubleClick(object sender, MouseButtonEventArgs e)
                {                
                    // Ensure row was clicked and not empty space
                    DataGridRow row = ItemsControl.ContainerFromElement((DataGrid)sender, e.OriginalSource as DependencyObject) as DataGridRow;
                    if ( row == null ) return;

                    ...
                    Stuff();
                }

До сих пор я не замечал никаких проблем с этим. Он не разделяет проблему, которую другие имеют, это означает, что двойной щелчок на заголовке или пустое пространство с заранее выбранной строкой все равно приведет к ее запуску.

Ответ 3

Вы можете попробовать обработчик обработчика текущей ячейки, который работает только одним кликом, а не двойным щелчком, если это то, что вы ищете, поскольку двойной щелчок может использоваться для инициирования редактирования ячейки или всей строки или для любого другого процесса:

private void datagrid_CurrentCellChanged(object sender, EventArgs e)
    {
        int selected_index = datagrid.SelectedIndex + 1;
        // this is used for debugging and testing.
        //MessageBox.Show("The index of the row for the clicked cell is " + selected_index);

    }

Ответ 4

Почему вы не получаете свойство SelectedRow во время события DoubleClick и что-то с ним делаете? Если SelectedRow имеет значение NULL, это означает, что не выбран Row, поэтому просто верните

private void Grid_DoubleClick(object sender, RoutedEventArgs e)
{
    if(grid.SelectedRow == null)
        return; // return if there no row selected

    // do something with the Selected row here
}