2010-06-25 62 views
26

我想雙擊WPF DataGrid的選定行時執行一些代碼。我知道datagrid有一個MouseDoubleClicked事件,它也有一個行選擇的事件,但我沒有看到「選定行雙擊」的任何事件... ...WPF數據網格選擇行點擊事件?

你認爲有可能以某種方式捕獲此事件?

+0

如果您使用Caliburn.Micro和MVVM的方法,有一種更好的方式來實現這一點 - [獲取行信息後doubleclick](http://stackoverflow.com/questions/9487084/getting-row-信息後-A-雙擊)。 – Sevenate 2014-01-22 10:07:15

回答

43

可以在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 
} 
+0

FWIW,我無法使'RoutedEvent'正常工作。我收到一條錯誤消息:「在'EventSetter'類型中未找到'RoutedEvent'屬性。」我可以通過將RoutedEvent更改爲Event來使其工作。 – 2012-08-10 04:00:06

+0

@CoreyCole,你是對的,這是一個錯誤。感謝您指出。 – 2012-08-10 08:24:12

+1

我發現把它放在''工作的地方'ItemContainerStyle'沒有。 – simonalexander2005 2016-05-16 08:38:37

-1

爲什麼不在DoubleClick事件發生時獲得SelectedRow屬性並對其執行操作?如果SelectedRow爲null,則意味着沒有行被選中所以才返回

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

    // do something with the Selected row here 
} 
+2

這不行。用戶可以先選擇該行,然後雙擊空白區域。 – Ivan 2011-09-18 13:45:48

12

,這個問題就爲我而尋找解決的辦法和答案沒有工作,無論是由於年齡或我自己implemen塔季翁。無論哪種方式,這是爲我工作的解決方案。

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(); 
       } 

到目前爲止,我還沒有發現任何問題,它。它不會分享其他人有的問題,即雙擊標題或預先選擇的行將空白空間仍然會導致它運行。

+1

您可能想要在返回之前執行'e.handled = True;' – simonalexander2005 2016-05-16 08:35:08

4

您可以嘗試當前單元格更改的事件處理程序,它只能用一次單擊而不是雙擊,如果多數民衆贊成什麼您尋找,因爲雙擊可用於啓動編輯單元格或整行或任何其他進程:

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); 

    } 
+3

您應該改爲使用'SelectionChanged'事件。選定的指數似乎落後於此事件。 – 2016-05-16 13:06:41