如何在右键单击事件处理程序内部模拟左键单击WPF

时间:2012-01-06 10:07:38

标签: c# .net wpf events event-handling

如何在右键单击

的事件处理程序中模拟左键单击WPF

实际上问题是网格单元没有被直接右边的lcik选中。 如果用户首先左键单击网格,然后右键单击,则效果很好。

因此,从右键单击处理程序内部,我想首先模拟左键单击。 怎么做。

这是右键单击事件处理程序

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 个答案:

答案 0 :(得分:1)

有点像,但你可能需要保护无限递归..

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

答案 1 :(得分:0)

你不应该这样做。这是一个设计缺陷。定义要在实际事件发生时执行的操作。

答案 2 :(得分:0)

您可以使用MenuItemAutomationPeer

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

修改

但请记住,BartoszWójtowicz是对的。您不应该在生产代码中使用它,因为它不是一个好的设计。您可以在测试代码中使用它,因此您不必为了测试目的而更改生产代码。