Andre Dieme Ответов: 2

В WPF в C# вложенный элемент управления DataGrid


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

файл XAML
 <DataGrid x:Name="dg_tab_100" MouseDoubleClick="dataGrid0_MouseDoubleClick">
   
   <DataGrid.RowDetailsTemplate >
                  <DataTemplate>
                    <DataGrid x:Name="gridPersons" MouseDoubleClick="dataGrid1_MouseDoubleClick" / >
                  </DataTemplate>
  < /DataGrid.RowDetailsTemplate>

</ DataGrid>


Код C#
   private void dataGrid0_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
//CODE DATAGRID 0
	}


   private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
//CODE DATAGRID 1
	}


Что я уже пробовал:

Колоны Datagrid со стилем и настройщиком событий

Richard Deeming

Если проблема в том, что он вызывает оба обработчика, пробовали ли вы установить e.Handled = true; в dataGrid1 обработчик?

Andre Dieme

Спасибо за ваш ответ, но он не работает.

2 Ответов

Рейтинг:
2

Andre Dieme

Мое решение

public bool EventHandler = false;

  private void dataGrid0_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (EventHandler == false) {
              //CODE DATAGRID 0
            }
            EventHandler = false;
        }

        private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            //CODE DATAGRID 1
            EventHandler = true;
            
        }


Рейтинг:
0

Shmuel Zang

Вы можете использовать Source свойство аргумента события для проверки источника события. Что-то вроде:


private void dataGrid0_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
	if (e.Source == dg_tab_100)
	{
		//CODE DATAGRID 0
	}
} 

private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
	if (e.Source == gridPersons)
	{
		//CODE DATAGRID 1
	}
}


Andre Dieme

Спасибо за ваш ответ. Но это не работает. Я думаю, что это должен быть e.OriginialSource. Но исходный источник - это текстовый блок, а не datagrid. Поэтому мне нужно пройти через родителей, пока я не найду датагрид.