2014-04-01 13 views
24

Potrzebuję programowo utworzyć DataGrid i trzeba dodać do niego zdarzenie z podwójnym kliknięciem wiersza. Jak to zrobić w języku C#? Znalazłem to;Zdarzenie dwukrotnego kliknięcia w wiersz WPF DataGrid programowo

myRow.MouseDoubleClick += new RoutedEventHandler(Row_DoubleClick); 

Mimo to nie działa dla mnie, ponieważ jestem wiązania DataGrid.ItemsSource do kolekcji, a nie ręcznie dodając w rzędach.

+4

Czy nie byłoby najłatwiejsze do subskrypcji 'myGrid .MouseDoubleClick', a następnie w module obsługi zdarzenia sprawdź, czy kliknięcie stało się w wierszu (lub w którym ro w jest wybrane)? – floele

Odpowiedz

53

Można to zrobić w XAML dodając domyślny styl dla DataGridRow pod jego części zasobami i zadeklarować zdarzenia setter tam:

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

LUB

W przypadku chcesz to zrobić w kod z tyłu. Ustaw x:Name na siatce, twórz styl programowo i ustaw styl jako RowStyle.

<DataGrid x:Name="dataGrid"/> 

w kodzie za:

Style rowStyle = new Style(typeof(DataGridRow)); 
rowStyle.Setters.Add(new EventSetter(DataGridRow.MouseDoubleClickEvent, 
         new MouseButtonEventHandler(Row_DoubleClick))); 
dataGrid.RowStyle = rowStyle; 

I

Jest przykładem obsługi zdarzeń:

private void Row_DoubleClick(object sender, MouseButtonEventArgs e) 
    { 
    DataGridRow row = sender as DataGridRow; 
    // Some operations with this row 
    } 
+0

To nie działa (.NET Framework wersja 4.5) – pongapundit

+0

@pongapundit Działa bardzo dobrze z .NET 4.5 – SBF

+0

Dzięki, spróbuj ponownie. – pongapundit

Powiązane problemy