Как смоделировать Левый клик в WPF из обработчика событий правого клика - PullRequest
0 голосов
/ 06 января 2012

Как смоделировать Левый клик в WPF из обработчика событий правого клика

На самом деле проблема в том, что ячейка сетки не выбирается, если прямо на нее щелкнуть правой кнопкой мыши. Если пользователь сначала щелкнет левой кнопкой мыши по ячейке сетки, а затем правой кнопкой мыши, тогда он будет работать хорошо.

Так что из обработчика правого клика я хочу сначала смоделировать левый клик. Как это сделать.

Это обработчик события правого клика

void OnCFLgrdrightmouseclick(object sender, MouseButtonEventArgs e)
{
  // usign the same sender and e i want to generate left click event first
  // and then remaining code should execute

}

Ответы [ 3 ]

1 голос
/ 06 января 2012

Нечто подобное, но вам, возможно, придется остерегаться бесконечной рекурсии ..

this.grid1 = ((System.Windows.Controls.Grid)(target));
this.grid1.MouseLeftButtonDown += new MouseButtonEventHandler(grid1_MouseLeftButtonDown);
this.grid1.MouseRightButtonDown += new MouseButtonEventHandler(grid1_MouseRightButtonDown);


void grid1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
   if( leftClicked < (e.Timestamp - maxTimeBetweenClicks) )
   {
      MouseButtonEventArgs fakeLeftMouse = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.LeftButton);
      grid1_MouseLeftButtonDown(sender, e);
   }

   leftClicked = 0;
   throw new NotImplementedException();
}

void grid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
   leftClicked = e.Timestamp;

   throw new NotImplementedException();
}
0 голосов
/ 02 мая 2013

Вы можете использовать MenuItemAutomationPeer для этого:

MenuItemAutomationPeer peer = new MenuItemAutomationPeer(myMenuItem);
((IInvokeProvider)peer).Invoke();

РЕДАКТИРОВАТЬ:

Но помните, что Бартош Войтович прав.Вы не должны использовать его в рабочем коде, так как это не очень хороший дизайн.Вы можете использовать его при тестировании кода, поэтому вам не придется менять производственный код в целях тестирования.

0 голосов
/ 06 января 2012

Ты не должен этого делать. Это недостаток дизайна. Определите действия, которые вы хотите выполнить, когда происходят реальные события.

...