我想雙擊WPF DataGrid的選定行時執行一些代碼。我知道datagrid有一個MouseDoubleClicked事件,它也有一個行選擇的事件,但我沒有看到「選定行雙擊」的任何事件... ...WPF數據網格選擇行點擊事件?
你認爲有可能以某種方式捕獲此事件?
我想雙擊WPF DataGrid的選定行時執行一些代碼。我知道datagrid有一個MouseDoubleClicked事件,它也有一個行選擇的事件,但我沒有看到「選定行雙擊」的任何事件... ...WPF數據網格選擇行點擊事件?
你認爲有可能以某種方式捕獲此事件?
可以在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
}
FWIW,我無法使'RoutedEvent'正常工作。我收到一條錯誤消息:「在'EventSetter'類型中未找到'RoutedEvent'屬性。」我可以通過將RoutedEvent更改爲Event來使其工作。 – 2012-08-10 04:00:06
@CoreyCole,你是對的,這是一個錯誤。感謝您指出。 – 2012-08-10 08:24:12
我發現把它放在'
爲什麼不在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
}
這不行。用戶可以先選擇該行,然後雙擊空白區域。 – Ivan 2011-09-18 13:45:48
,這個問題就爲我而尋找解決的辦法和答案沒有工作,無論是由於年齡或我自己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();
}
到目前爲止,我還沒有發現任何問題,它。它不會分享其他人有的問題,即雙擊標題或預先選擇的行將空白空間仍然會導致它運行。
您可能想要在返回之前執行'e.handled = True;' – simonalexander2005 2016-05-16 08:35:08
您可以嘗試當前單元格更改的事件處理程序,它只能用一次單擊而不是雙擊,如果多數民衆贊成什麼您尋找,因爲雙擊可用於啓動編輯單元格或整行或任何其他進程:
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);
}
您應該改爲使用'SelectionChanged'事件。選定的指數似乎落後於此事件。 – 2016-05-16 13:06:41
如果您使用Caliburn.Micro和MVVM的方法,有一種更好的方式來實現這一點 - [獲取行信息後doubleclick](http://stackoverflow.com/questions/9487084/getting-row-信息後-A-雙擊)。 – Sevenate 2014-01-22 10:07:15